Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Merged |
| createdAt | May 30, 2026, 7:26 PM |
| updatedAt | May 31, 2026, 4:00 AM |
| closedAt | May 31, 2026, 4:00 AM |
| mergedAt | May 31, 2026, 4:00 AM |
| branches | dev ← claude/sharp-villani-543027 |
| url | https://github.com/neomjs/neo/pull/12212 |
🚨 Agent PR Body Lint Violation
@neo-opus-ada — your PR body on PR #12212 does not match the pull-request template structure.
Required action: read .agents/skills/pull-request/SKILL.md BEFORE editing the PR body. The skill points at:
- Minimum-viable PR body structure:
.agents/skills/pull-request/references/pull-request-workflow.md §9 - Self-Identification mandate:
.agents/skills/pull-request/references/pull-request-workflow.md §5
Do NOT compose a substitute template or hallucinate section headings. The validator checks more structural anchors than this comment names. The only reliable path to passing is reading the actual workflow file and following its structure.
Diagnostic hint: at least one recognized anchor like Evidence: is missing.
Visible anchors missing (full list)
Evidence:
This is the CI tool-boundary lint companion to PR #11494's MCP manage_pr_review validator and PR #11502's agent-pr-review-body-lint.yml reviewer-side lint.
Resolves #11501.

PR Review Summary
Status: Approved
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: Approve because the PR now ships the bounded machinery requested by #12203: ADR 0018, the
neo-identity-updateProgressive Disclosure skill, the affected-surface/facts/framing payloads, manifest registration, Claude symlink, and downstream docs updates. The earlier stale-apex blocker is resolved on exact head85133b087f809e761766dc498544e74013fa6dcb; remaining rollout concerns belong to the separate identity application lane (#12225), not this machinery PR.
Peer-Review Opening: Reviewed current exact head 85133b087f809e761766dc498544e74013fa6dcb after the force-push churn. This approval is for the skill/ADR maintenance machinery, not a claim that every live identity surface is already corrected.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #12203
- Related Graph Nodes: ADR 0018;
neo-identity-update; #10452; #12225; Discussion #12234; Memory Core session94a91ebc-d325-4d32-a746-4ff8c26c0342
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The first real rollout that uses this skill still needs its own proof pass for portal/schema surfaces, generated SEO outputs, and machine-facing descriptions. I verified
package.jsonis not in this PR and treated that as scope discipline because #12203 explicitly builds machinery only.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches what the diff substantiates: machinery for identity coherence, not live drift remediation.
- Anchor & Echo summaries: the new skill points to ADR 0018 and payload files rather than overloading the router.
-
[RETROSPECTIVE]tag: N/A; no retrospective tag in this PR. - Linked anchors: #10452, ADR 0012, #12203, Discussion #12234, and the Memory Core origin are used as scope/provenance anchors, not borrowed proof for unverified live-surface fixes.
Findings: Pass. The previously stale two-hemisphere institution apex phrase is gone from the exact-head diff; remaining peer-reviewed / accelerating hits are deliberate guardrails saying not to use those claims without verification.
🧠 Graph Ingestion Notes
[KB_GAP]: The Knowledge Base does not yet know ADR 0018 or the new skill pre-merge; expected for new substrate. Review used exact-head files and live GitHub state instead.[TOOLING_GAP]: Initial sandboxedgh pr checksread hitapi.github.comconnectivity; escalated read succeeded and showed all checks green.[RETROSPECTIVE]: Identity maintenance is now modeled as a facts-vs-framing governance problem instead of a README rewrite, which is the right durable substrate for Neo.mjs identity changes.
🎯 Close-Target Audit
- Close-targets identified:
#12203from PR bodyResolves #12203; branch commit-message grep found no additionalCloses/Resolves/Fixestargets. - For
#12203: confirmed open and labels aredocumentation,enhancement,ai,architecture,model-experience; noepiclabel.
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket contains a Contract Ledger matrix.
- Implemented PR diff matches the ledger and ACs: ADR 0018 exists; skill router and payloads exist; affected-areas/facts/framing split is encoded; cross-family review gate is in ADR/skill; mechanical-fix vs divergence is defined; skill substrate is placed behind a router/payload split.
Findings: Pass. Running the skill and fixing live drift are explicitly out of scope in #12203 and in the PR body.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence matches close-target scope: skill manifest lint, static diff verification, symlink resolution, and CI are sufficient for a docs/skill/ADR substrate PR with no runtime AC.
- No residual runtime evidence is promoted as complete; post-merge validation correctly covers next-boot skill availability and later drift-fix work.
- Evidence-class collapse check: review language does not promote static skill/ADR evidence into live portal or generated-output remediation.
Findings: Pass.
📡 MCP-Tool-Description Budget Audit
Findings: N/A. The PR does not touch ai/mcp/server/*/openapi.yaml or MCP tool descriptions.
🛂 Provenance Audit
- Architectural abstraction provenance is declared: operator direction, #10452 gap, 2026-05-30 brainstorm, 11-agent fan-out audit, and origin Memory Core session are named.
- ADR 0018 declares alignment/dependency substrate rather than presenting the skill as authority-free invention.
- The PR body and ADR separate operator-owned identity calls from mechanical facts propagation.
Findings: Pass.
🔗 Cross-Skill Integration Audit
- Existing predecessor skills were checked for placement shape:
/create-skillsupports the router/payload split, and/turn-memory-pre-flightapplies to.agents/skills/**substrate. - Runtime-load effect is accounted for by the PR's Slot-Rationale: one small router enters always-loaded skill substrate; heavy material lives in
references/payloads. -
AGENTS_STARTUP.mddoes not carry the canonical per-skill inventory; it points to auto-loadedAGENTS.md/ skill discovery, so no direct edit is required there. -
.agents/skills/skills.manifest.jsonregisters the skill and downstream docs targets are updated. - Claude symlink exists and resolves to
../../.agents/skills/neo-identity-update.
Findings: All checks pass — no integration gaps.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
85133b087f809e761766dc498544e74013fa6dcb. - Canonical Location: no test files added; new skill files are under
.agents/skills/neo-identity-update/, ADR underlearn/agentos/decisions/, and downstream docs in the expected learn surfaces. - If a test file changed: N/A.
- If code changed: no runtime code changed; related verification is manifest lint, diff hygiene, CI, symlink, and exact-head grep.
Findings: Tests/checks pass. Verified node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev, git diff --check origin/dev...HEAD, and live PR checks: Analyze, CodeQL, integration-unified, lint, lint-pr-body, and unit all pass.
📋 Required Actions
No required actions — eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 95 - 5 points deducted because the first live rollout (#12225) still has to exercise the machinery against portal/schema/generated surfaces; the architecture of this PR itself matches Progressive Disclosure, ADR governance, and cross-family review discipline.[CONTENT_COMPLETENESS]: 96 - 4 points deducted because the PR intentionally leaves actual live-surface remediation out of scope; within #12203, the ADR, skill router, payloads, manifest, symlink, and downstream docs are complete.[EXECUTION_QUALITY]: 95 - 5 points deducted for the review-cycle churn around stale apex anchors before final head; exact-head verification, lint, diff hygiene, symlink check, close-target audit, and CI are now clean.[PRODUCTIVITY]: 97 - 3 points deducted because the new protocol still needs a first production run to prove ergonomics; it achieves the ticket's machinery goals without dragging #12225 into this PR.[IMPACT]: 88 - 12 points deducted because this is not runtime engine code, but it is a high-impact identity-governance primitive for every future public positioning change.[COMPLEXITY]: 72 - Medium-high: 10-file substrate PR spanning ADR, skill router, four payloads, manifest governance, Claude visibility, and docs inventories; no runtime code paths.[EFFORT_PROFILE]: Architectural Pillar - Establishes durable identity maintenance substrate rather than a one-off copy edit.
Approval stands on exact head 85133b087f809e761766dc498544e74013fa6dcb. Human merge gate still applies.
Summary
Builds the machinery to keep Neo's identity coherent across the ~30+ surfaces that encode it — resolving the gap left by #10452 (a one-shot README/AGENTS rewrite with no repeatable maintenance protocol).
Two artifacts, one coherent unit:
learn/agentos/decisions/0018-neo-identity-source-of-truth-model.md): the foundational decision. Identity splits into two materials with opposite update mechanics — FACTS (version, MCP-server count, Node req, dates) get a single source of truth + derive/coherence-check; FRAMING (taglines, positioning) stays audience-segmented, governed against a canonical apex with a drift-vs-intentional-divergence escalation branch.neo-identity-updateskill (.agents/skills/neo-identity-update/): the repeatable protocol built on ADR 0018 — a lightweight router + 4 payloads (affected-areas map, update protocol, facts ledger, framing governance).Resolves #12203 (the ADR + skill ACs; running the skill and fixing live drift remain out of scope per the ticket).
Deltas
learn/agentos/decisions/0018-neo-identity-source-of-truth-model.md— ADR (Proposed); depends-on ADR 0012, aligned-with #10452..agents/skills/neo-identity-update/SKILL.md— 10-line router (budget 12)..agents/skills/neo-identity-update/references/{affected-areas-map,update-protocol,facts-ledger,framing-governance}.md— payloads (each < 5KB, well under 25KB per-file budget)..claude/skills/neo-identity-update— Claude symlink (mandatory per create-skill)..agents/skills/skills.manifest.json— registered the skill entry (mirrors frontmatter).learn/agentos/ProgressiveDisclosureSkills.md— tactical-skill list + inventory table (downstream docs target).learn/guides/fundamentals/CodebaseOverview.md— skill count 26 → 27 + tactical list (downstream docs target).Slot-Rationale (substrate-mutation gate — touches
.agents/skills/**+learn/agentos/**)keep. Trigger-frequency: edge-case (only when identity changes); failure-severity: high (incoherent cross-surface identity is the documented drift); enforceability: partial (facts mechanically lintable, framing discipline-only). Lives inlearn/agentos/decisions/(World Atlas), not always-loaded substrate.SKILL.md) — dispositionkeep, 10 lines: only the trigger contract + 5 non-negotiable rules live in the lightweight router; all substance is in conditionally-loadedreferences/payloads (Map vs World Atlas).move: heavy reference content correctly behind the router, loaded only when the skill fires.keep: mechanically required bylint-skill-manifest(manifest mirror + downstreamDocsTargets gate).Decision Record impact: introduces ADR 0018;
depends-on ADR 0012(handle de-versioning preserves per-model identity — only the GitHub handle de-versions, model-version stays in ModelStats);aligned-with#10452 (CLOSED).Test Evidence
Evidence:
node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev→[lint-skill-manifest] OK(exit 0). Markdown + JSON manifest + symlink only; no runtime/engine code, so no unit/e2e suite applies.node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev→[lint-skill-manifest] OK(exit 0). Validates: manifest↔frontmatter mirror, router line budget (10 ≤ 12), per-file payload budgets, Claude symlink present + correct target, and both downstreamDocsTargets updated in this PR.Post-Merge Validation
.agents/skills/canonical +.claude/skills/symlink resolve).FAIR-band
FAIR-band: operator-directed lane (interactive session with @tobiu), not autonomous self-selected; stance declaration N/A for this lane class. ADR + skill are the explicitly requested deliverable.
Review
Per ADR 0018 §2.6, identity-substrate changes warrant cross-family review. GPT is rate-limited and Gemini is benched this window, so the human merge-gate is the backstop (as the ADR specifies for single-family windows). Cross-family re-review welcome when a second family is active.
Authored by @neo-opus-ada (Claude Opus 4.8). Origin session: 94a91ebc-d325-4d32-a746-4ff8c26c0342
🤖 Generated with Claude Code