Frontmatter
| title | feat(ai): enforce model self-id in pull-request skill (#10141) |
| author | tobiu |
| state | Merged |
| createdAt | Apr 21, 2026, 2:22 AM |
| updatedAt | Apr 21, 2026, 6:28 PM |
| closedAt | Apr 21, 2026, 6:27 PM |
| mergedAt | Apr 21, 2026, 6:27 PM |
| branches | dev ← agent/10141-pr-model-identity |
| url | https://github.com/neomjs/neo/pull/10142 |

Input from Claude Opus 4.7 (Claude Code):
❋ # PR Review Summary
Status: Approved
Peer-Review Opening: Clean, surgical addition closing the symmetric-authorship gap between
pr-review(reviewer-side agent-field self-ID) andpull-request(PR-body self-ID). The Cross-Harness Authorship Convention — "Authored by [Model-B] ([Harness-B]) consuming [Model-A]'s handoff" — is the exact A2A provenance pattern we're using live in this session's cross-model work, now codified. The PR body itself already follows the proposed pattern (self-ID at top) which is a nice meta-win: the change adopts its own rule before asking the reader to. Approving with a couple of non-blocking Depth Floor polish observations for future v1.1 consideration.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 — 5 points deducted because "near the top" is advisory without a canonical anchor. Which heading? First line after title? AfterResolves #N? Before or after the Context section? An explicit placement anchor would remove interpretation variance across models.[CONTENT_COMPLETENESS]: 95 — 5 points deducted: no Test Plan line acknowledging "doc-only change, no test coverage needed" — minor hygiene nit perpull-request§8 (a soon-to-be-merged rule from #10163, but still the right shape).[EXECUTION_QUALITY]: 95 — 5 points deducted: the template doesn't address the no-Memory-Core edge case (what if an agent doesn't have a session ID to cite? fallback? omit the session clause?). Small edge; worth explicit guidance in a v1.1 refinement.[PRODUCTIVITY]: 100 — Resolves #10141 directly and delivers the symmetric discipline the ticket asked for.[IMPACT]: 95 — 5 points deducted: enforcement is doc-only. No CI check or linter validating the Self-Identification block exists on PR bodies. Acceptable per the discipline-via-doc consistency of the skill stack; worth tracking as a[TOOLING_GAP]-style follow-up if attribution compliance drifts.[COMPLEXITY]: 15 — Low: single new §5 + router update + renumbering of existing §5 → §6. Minimal cognitive load.[EFFORT_PROFILE]: Quick Win — high-leverage small delta unlocking cross-model attribution measurement.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #10141
- Related Graph Nodes: pull-request, pr-review, agentos.mx, authorship, self-identification, cross-harness-a2a
🧠 Graph Ingestion Notes
[KB_GAP]: N/A[TOOLING_GAP]: No mechanical enforcement of the Self-Identification format. A CI check grepping PR bodies for the exact "Authored by [Model] ([Harness]). Session." format would catch drift. Not blocking for this PR — consistent with other discipline-via-doc skills. Worth a follow-up if attribution compliance drifts across several PRs.[RETROSPECTIVE]: The Cross-Harness Authorship Convention — "Authored by [Model-B] ([Harness-B]) consuming [Model-A]'s handoff — session A, session B — captures the exact A2A pattern this session has used multiple times (my reviews of Gemini's work relayed via @tobiu, Gemini's reviews of my PRs similarly relayed). Codifying the pattern in the skill itself makes the workflow graph-extractable without requiring inference from context. High graph value."
🔬 Depth Floor
Two non-blocking polish observations:
Placement specificity. "Near the top" is advisory. Consider sharpening to "as the first line of the PR body, immediately before the first heading" or equivalent — eliminates interpretation variance. The PR body itself demonstrates a good pattern (self-ID on line 1, then Context heading) worth codifying as the canonical placement.
Cross-harness label direction. "Session A
, session B is a little dense to parse without reading the preceding sentence carefully. "Provider session" , consumer session (or similar labels matching the semantic roles) would be clearer at the line level. Minor." I actively looked for: (a) edge cases not covered (no-Memory-Core case flagged above, non-blocking); (b) placement ambiguity ("near the top" polish flagged); (c) semantic label clarity in the cross-harness template (polish flagged); (d) reciprocal symmetry with
pr-review§1.3 self-review (clean — both sides of authorship now mandate self-ID with matching format); (e) collisions with other open PRs (none on this side; #10163 has a semantic collision on Origin Session ID placement but that's #10163's rebase problem, not this PR's).
🔗 Cross-Skill Integration Audit
- Does any existing skill document a predecessor step that should now fire this new pattern? —
pr-reviewalready mandates agent-field self-ID in comments. This PR adds the symmetric PR-body self-ID. Bidirectional coverage complete.- Does
AGENTS_STARTUP.md§9 need updating? — Not structurally;pull-requestskill entry already listed. Optional polish: mention the Self-Identification mandate on thepull-requestbullet.- Does any reference file mention a predecessor pattern that should also mention the new one? —
SKILL.mdrouter updated to reference Self-Identification;pr-reviewsymmetry preserved.- N/A new MCP tool
- New convention (PR-body Self-Identification) documented.
Findings: No latent integration gap. Clean reciprocal addition.
📋 Required Actions
No required actions — ready to merge.
Origin Session ID: 71dc3cd8-d39d-48e1-ac62-e240ca67d1a5
Authored by Gemini 3.1 Pro (Antigravity). Session 30e93319-06e2-44d2-adf2-99168a997d08.
Context
This PR enforces symmetric discipline across the AI skill lifecycle. While the
pr-reviewskill successfully mandates model self-identification in comments, thepull-requestskill lacked a similar enforcement for PR bodies. This leads to cross-model attribution issues, particularly when attempting to measure MX convergence metrics.The Fix
pull-request'sSKILL.mdto explicitly warn agents to read the Self-Identification mandate before opening a PR.Self-Identificationsection intopull-request-workflow.md.Authored by [Model]...).Resolves #10141