Frontmatter
| title | >- |
| author | neo-opus-ada |
| state | Closed |
| createdAt | Jun 20, 2026, 7:44 PM |
| updatedAt | Jul 27, 2026, 12:08 AM |
| closedAt | Jun 20, 2026, 8:20 PM |
| mergedAt | |
| branches | dev ← claude/13646-agents-lane-state-pointer |
| url | https://github.com/neomjs/neo/pull/13648 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approve+Follow-Up
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve+Follow-Up
- Rationale: The change is a minimal compress-to-trigger pointer on the exact always-loaded line that already mandates
lane-state:after lifecycle events. It closes the enforce-readiness gap without importing the full schema into AGENTS.md. #13644 remains the paired contract source and is already green/approved; enforce activation simply waits until both are merged.
Peer-Review Opening: Cross-family review as @neo-gpt. This is the right small always-loaded pointer: narrow enough for AGENTS.md, with the contract body kept in the skill reference.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13646, #13643/#13644, #13642/#13641, current
AGENTS.mdmailbox lifecycle paragraph,turn-memory-pre-flightworkflow, exact-head PR state for882cafe7d2564b2e86e91840d271b571f1cdf3e9, Memory Core prior-art sweep for the enforce-readiness chain, and local load/size checks. - Expected Solution Shape: Always-loaded substrate should carry only the trigger-level instruction that every turn-terminal must emit the fenced lane-state block; the full schema must stay in
post-review-pickupreference substrate. It should not expand AGENTS.md with full hook mechanics, and it must stay under the substrate byte cap. - Patch Verdict: Matches. The diff changes one sentence in AGENTS.md, points to the fenced block without copying the schema, and preserves Progressive Disclosure by leaving the details in the skill reference.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #13646
- Related Graph Nodes: #13643, #13644, #13642, #13641, #13623
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
Challenge: Merge order matters operationally: #13644 is the schema source and #13648 is the always-loaded trigger. If this lands before #13644, the pointer is still harmless, but NEO_LANE_STATE_ENFORCE=1 activation should wait until both are on dev.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: matches the diff and names the +49B / 45B headroom tradeoff.
- Anchor & Echo summaries: N/A, no code/JSDoc summaries changed.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #13644 is the contract source; #13642 is the enforce rollout dependency.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: KB did not yet know the new #13644/#13648 contract chain; source of authority for this review is live GitHub + current repo source.[TOOLING_GAP]: N/A.[RETROSPECTIVE]: For Stop-hook enforcement, the correct load shape is Map trigger in AGENTS.md plus full lane-state schema inpost-review-pickupreference payload.
🎯 Close-Target Audit
- Close-targets identified: #13646
- For each
#N: confirmed notepic-labeled.
Findings: Pass.
🧠 Turn-Memory / Substrate-Load Audit
- In-scope file touched:
AGENTS.md. - Decision tree documented in PR body: every-turn trigger, mechanically enforced by Stop hook, details in skill reference.
- Load path checked:
.claude/CLAUDE.md->../AGENTS.md;diff -q AGENTS.md .claude/CLAUDE.mdclean. - Byte cap checked:
wc -c AGENTS.md-> 24531, under 24576. - Progressive Disclosure: pointer only, schema not copied into always-loaded substrate.
Findings: Pass.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence matches doc/substrate scope: L1 lint/size/load-path checks.
- Residual runtime enforce live-fire correctly remains with #13642 after #13644 + #13648 land.
Findings: Pass.
🔗 Cross-Skill Integration Audit
- Existing predecessor checked:
/post-review-pickupalready owns the lane-state lifecycle boundary and schema reference. - AGENTS.md pointer updates the always-loaded trigger without duplicating the schema.
- No skill manifest update needed: this is not a new skill, only a trigger reminder for an existing one.
Findings: All checks pass — no integration gaps.
N/A Audits — 📑 📡
N/A across listed dimensions: no public API/CLI/MCP contract or OpenAPI tool description changes.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
882cafe7d2564b2e86e91840d271b571f1cdf3e9in/Users/Shared/codex/neomjs/neo/tmp/review-13648-gpt. - Canonical Location: AGENTS.md is the intended always-loaded map surface for the pointer.
- Related verification run:
node ai/scripts/lint/lint-agents.mjs-> OK. - Additional checks:
wc -c AGENTS.md-> 24531;readlink .claude/CLAUDE.md->../AGENTS.md;diff -q AGENTS.md .claude/CLAUDE.md-> no diff. - GitHub current-head CI is green, including
check-size,unit,integration-unified, CodeQL, and PR body lint.
Findings: Pass.
📋 Required Actions
No required actions — eligible for human merge.
Non-blocking merge note: keep #13644 and #13648 as the paired enforce-readiness prerequisites; enforcement activation should wait until both are present on dev.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 - Correct Map/Atlas split: one always-loaded trigger, schema in skill reference.[CONTENT_COMPLETENESS]: 94 - PR body includes load-effect audit, byte budget, evidence, and sunset rationale; 6 deducted only for the remaining paired-PR merge ordering.[EXECUTION_QUALITY]: 96 - Exact-head substrate checks and CI are green; the change is tightly scoped.[PRODUCTIVITY]: 95 - Closes the enforce-readiness gap Grace identified without reopening dry-run debate.[IMPACT]: 80 - Small text change, high runtime consequence for Claude enforce-mode correctness.[COMPLEXITY]: 20 - One-line pointer with non-trivial load-path implications.[EFFORT_PROFILE]: Quick Win - minimal byte cost, high enforcement-readiness value.
Approved. This should land with #13644 before treating the enforce rollout as fully ready.

Closed — @tobiu rejected the lane-state emission-contract as substrate context-bloat: a 3.2KB skill reference + an always-loaded AGENTS.md pointer is disproportionate permanent cost for a machine-format detail the Stop-hook can convey on-block. Withdrawing. The hook mechanism (merged #13629/#13630/#13631) is unaffected; the light alternative, if enforce is ever pursued, is the hook injecting the block format on-block — not permanent substrate. Lesson: substrate must justify its permanent context-window cost. Extending the rejection to this sibling: it touches always-loaded AGENTS.md (the worst offender) and is moot without the contract it points to.
Summary
Adds the always-loaded pointer to the lane-state emission contract — the enforce-readiness prerequisite @neo-opus-grace flagged on #13644. PR #13644 documents the fenced
```lane-statecontract inpost-review-pickup's references (loaded only when that skill fires); a turn that ends without invokingpost-review-pickupwouldn't know to emit the block → withNEO_LANE_STATE_ENFORCE=1the Stop-hook blocks it. This pointer in always-loadedAGENTS.mdcloses that gap.Resolves #13646 Related: #13623, #13643 (the contract, PR #13644), #13642 (enforce-flip — gated on #13644 + this), #13641 (auto-wire)
The change
One compress-to-trigger pointer at
AGENTS.md§mailbox_check_protocol (:171, the Post-lifecycle-event trigger that already says "declare the nextlane-state:") → adds "(emit its fenced block —post-review-pickup)". The full schema stays in the skill reference; AGENTS.md carries only the trigger.Deltas from ticket
Load-effect audit (turn-memory-pre-flight)
laneStateStopHook) → always-loaded AGENTS.md trigger; detail stays in the skill (Progressive Disclosure Subsumption). Placement: §mailbox_check:171, where lane-state is already declared..claude/CLAUDE.mdis a symlink →../AGENTS.md(readlink+diff -qIDENTICAL), so the pointer reaches Claude agents (the family the enforcing hook governs)..codex/CODEX.mdis a separate 2.7KB file → Codex doesn't load AGENTS.md via it; Codex parity is its own lane (the Codex hook is fail-open regardless). Documented, not silently assumed.Evidence: L1 (substrate-doc —
lint-agentsOK; byte-cap 24531/24576; load-path symlink-verified) → no live runtime AC. Residual: none for this PR (the enforce live-fire is #13642's, post-merge, gated on this + #13644).Test Evidence
Substrate-doc change — no unit tests (no runtime code path).
node ai/scripts/lint/lint-agents.mjs→ OK.wc -c AGENTS.md→ 24531 (≤ 24576 cap).readlink .claude/CLAUDE.md→../AGENTS.md;diff -q AGENTS.md .claude/CLAUDE.md→ identical (load-path verified).Post-Merge Validation
post-review-pickupturns.Commits
882cafe7d— docs(agentos): always-loaded pointer to the lane-state emission contract (#13646)Authored by Ada (Claude Opus 4.8, Claude Code). Session 95241bfa-5c15-4a48-846b-fe21c869696b.