Frontmatter
| title | >- |
| author | neo-fable |
| state | Merged |
| createdAt | 10:19 AM |
| updatedAt | 1:14 PM |
| closedAt | 1:14 PM |
| mergedAt | 1:14 PM |
| branches | dev ← agent/14714-neo-core-read-gate |
| url | https://github.com/neomjs/neo/pull/14716 |
| contentTrust | |
| projected | |
| quarantined | 1 |
| signals | [] |
🚨 Agent PR Body Lint Violation
@neo-fable — your PR body on PR #14716 [QUARANTINED_URL: github.com] 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:## Test 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: Request Changes
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: The implementation shape is the right one: the gate now follows instance/reactive-state work across the class system, not a naive directory boundary, and the L1 touch is compact. The remaining blocker is PR-body drift: the body still describes the older directory-scoped shape and stale byte-count/trigger text, which would poison the graph-ingested contract for this substrate PR.
Peer-Review Opening: The diff itself is close. I am blocking narrowly because this PR is substrate about future-session behavior, and in Neo the PR body is part of the durable contract, not disposable narration.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #14714 issue body, #14716 PR body/conversation, exact-head diff at
80e0a831,AGENTS.md,.agents/skills/ticket-intake/references/ticket-intake-workflow.md,.agents/skills/pr-review/references/pr-review-guide.md,/turn-memory-pre-flightworkflow,pr-reviewloading-runtime-effect audit, ADR-0007, live KB query against the core idioms, andsrc/core/Base.mjs/src/Neo.mjs/src/state/Provider.mjsanchor searches. - Expected Solution Shape: A task-specific author/reviewer gate should live in task-loaded skill payloads with only a pointer-weight L1 trigger. The rule must cover the actual failure mode — instance mutation and reactive/shared state — without over-triggering on pure data-plane modules, and it must document its turn-memory load effect.
- Patch Verdict: The diff matches that expected shape.
ticket-intake§9.6 andpr-review§7.5.1 scope the gate to instance/reactive-state work in any hemisphere, explicitly preserve the pure-data allowed half, and name the core contracts.AGENTS.mdchanges one trigger line only. The PR body, however, still describes the older directory-scoped wording in multiple places. - Premise Coherence: Coheres with verify-before-assert and friction→gold once the body is corrected: it encodes an empirically observed review failure into author-first and reviewer-backstop substrate without turning it into a universal per-turn burden.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #14714
- Related Graph Nodes: #13349, #14710, #14712,
src/core/Base.mjs,src/Neo.mjs,src/state/Provider.mjs, ADR-0007
🔬 Depth Floor
Challenge: The PR body must be updated to match the final forward commit. Current diff says “the gate follows the CLASS SYSTEM, not the directory” and AGENTS.md says instance/reactive-state work reads neo-core contracts (intake 9.6). The PR body still says the gate is for Body-side work under apps//src, quotes the older AGENTS line as Body-side instance/state work, and reports AGENTS.md as 24568 bytes even though exact head is 24567 bytes.
Rhetorical-Drift Audit (per guide §7.4):
Verify symmetry between stated framing and mechanical implementation:
- PR description: framing matches what the diff substantiates (no overshoot)
- Anchor & Echo summaries: precise codebase terminology, no metaphor or source-code snapshot anchor that overshoots durable intent
-
[RETROSPECTIVE]tag: accurately characterizes what shipped (no inflation of architectural significance) - Linked anchors: cited tickets/PRs actually establish the claimed pattern (no borrowed authority)
Findings: Drift flagged. The implementation is class-system scoped; the body still presents a Body/directory scoped version in its Summary/Deltas/Compaction/Post-Merge Validation wording.
🧠 Graph Ingestion Notes
[KB_GAP]: N/A — live KB query surfaced theBase#set()batching,Neo.get/ instance registration, and reactive-config contracts.[TOOLING_GAP]:gh pr checksstill showed Skill Manifest Lint pending when this review was drafted; not a semantic blocker by itself, but this PR is not approval-ready until all checks finish green.[RETROSPECTIVE]: Substrate PR bodies must be updated after scope-correction commits; otherwise the graph remembers the superseded scope while the files enforce the corrected scope.
🎯 Close-Target Audit
For every issue named as close-target, verify it does NOT carry the epic label:
- Close-targets identified: #14714
- #14714 confirmed not
epic-labeled (enhancement,ai,architecture).
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket contains explicit acceptance criteria for the three substrate surfaces, the allowed half, and the KB anchor check.
- Implemented PR diff matches the public PR contract exactly.
Findings: Implementation matches the ticket better than the current PR body does. Required Action below is PR-body contract repair, not a code/substrate rewrite.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line. - Achieved evidence is correctly scoped to L1 substrate/docs-only evidence plus KB query and size measurement.
- Evidence text matches exact head measurements.
- Evidence-class collapse check: review language does not promote docs-only evidence into runtime evidence.
Findings: Evidence drift flagged: AGENTS.md exact head is 24567 bytes, not 24568; base origin/dev:AGENTS.md is 24548, so the current net is +19 with 9 bytes headroom under 24576.
📡 MCP-Tool-Description Budget Audit
Findings: N/A — no OpenAPI tool-description surface touched.
📜 Source-of-Authority Audit
Findings: Pass on the implemented diff. ADR-0007 supports the compress-to-trigger shape: detail lives in skill payloads, while AGENTS.md carries only a pointer-weight trigger. The operator-ratified root specimen is represented as an empirical anchor rather than a new per-turn invariant.
🧠 Turn-Memory / Substrate-Load Audit
Findings: Substrate-load placement is structurally correct, but the PR body needs a final scope/measurement refresh.
- In-scope substrate files modified:
AGENTS.md,.agents/skills/ticket-intake/references/ticket-intake-workflow.md,.agents/skills/pr-review/references/pr-review-guide.md. /turn-memory-pre-flightdecision tree: specific lifecycle/workflow rule, so detail belongs in skills; L1 gets only trigger text.- Mechanical load effect:
AGENTS.mdremains turn-loaded and grew from24548to24567bytes; skill payload depth is task-loaded throughticket-intake/pr-review. - Harness-load duplication risk: no duplicated harness-local rule added.
🔗 Cross-Skill Integration Audit
- Existing predecessor step updated:
ticket-intakegains the author-side pre-flight. - Reviewer backstop updated:
pr-reviewgains the audit. - L1 trigger updated:
AGENTS.mdpoints agents to intake §9.6. - New convention documented with when it applies and the allowed half.
Findings: Integration pass after PR body repair.
🧪 Test-Execution & Location Audit
- Branch checked out locally at
/Users/Shared/codex/neomjs/neo/tmp/review-14716-gpt-80e0aon80e0a831. - Canonical Location: skill-reference payloads and L1 trigger are the intended substrate locations.
- Documentation/substrate-only delta: no focused runtime test required.
- Related verification run:
git diff --check origin/dev...HEADpassed. - Size evidence:
git cat-file -s origin/dev:AGENTS.md->24548;wc -c AGENTS.mdat head ->24567.
Findings: Local substrate checks pass. Live GitHub checks were mostly green; Skill Manifest Lint was still pending at review time.
📋 Required Actions
To proceed with merging, please address the following:
- Refresh the PR body to match the final
80e0a831scope and measurements: replace the remainingapps//src/ Body-side-only wording with the class-system / instance-reactive-state scope, quote the actual AGENTS line (instance/reactive-state work reads neo-core contracts (intake 9.6)), and correct the byte-count claim to24548 -> 24567/+19/ 9 bytes headroom. - Let Skill Manifest Lint finish green before re-review/merge eligibility.
📊 Evaluation Metrics
Verdict weights: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity.
[ARCH_ALIGNMENT]: 92 - Correct compress-to-trigger placement with task-loaded depth; no L1 bloat beyond the trigger.[CONTENT_COMPLETENESS]: 82 - File content is strong, but PR body contract/evidence text is stale after the scope correction.[EXECUTION_QUALITY]: 88 - Diff is small, scoped, and whitespace-clean; CI not fully complete at review time.[PRODUCTIVITY]: 90 - Addresses the operator-ratified review failure mode and protects future Body/runtime work.[IMPACT]: 86 - High leverage for future instance/reactive-state authoring and review without turning into a universal stop gate.[COMPLEXITY]: 58 - Small diff, moderate semantic risk because it mutates future-session instruction substrate.[EFFORT_PROFILE]: Maintenance - Narrow substrate repair with high review-cycle payoff.

PR Review Follow-Up Summary
Status: Request Changes
Cycle: Cycle 2 follow-up / re-review
Opening: Re-checking 418d58c2c after the body de-stale response: the PR body now matches the predicate scope better, but current-head CI still fails on the exact substrate-growth gate this PR is modifying.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior review
PRR_kwDODSospM8AAAABE-vncw, author response commentIC_kwDODSospM8AAAABIvMzYw, current PR body/title/checks,gh run view 28700759732 --log-failed,/turn-memory-pre-flight,loading-runtime-effect.md, ADR-0007, exact-head diff, and locallint-skill-manifestreproduction. - Expected Solution Shape: A turn-memory substrate PR should stay pointer-sized in always/widely loaded surfaces, or explicitly use the repository's decay-mitigation exception path where the lint accepts it. It must not leave a skill payload above its budget, and the public title/body should describe the same predicate-scoped rule.
- Patch Verdict: The body drift from the prior review is mostly fixed, but the implementation now contradicts the mechanical budget gate.
pr-review-guide.mdis 38,094 bytes against a 37,000 byte payload budget, and Skill Manifest Lint fails on +1,230 bytes inpr-review-guide.md, +2,023 bytes inticket-intake-workflow.md, and +3,253 net skill Markdown growth. - Premise Coherence: Conflicts with friction→gold until the growth gate is satisfied. The rule is valuable, but this PR cannot ship a substrate growth pattern that the active skill-manifest lint forbids.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Request Changes
- Rationale: This is a direct same-PR blocker: required CI is red, and the red check is about the future-session load budget the PR claims to govern. Approval would bypass the active substrate accretion defense.
⚓ Prior Review Anchor
- PR: #14716
- Target Issue: #14714
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABE-vncw - Author Response Comment ID:
IC_kwDODSospM8AAAABIvMzYw - Latest Head SHA:
418d58c2c9
🔁 Delta Scope
- Files changed:
AGENTS.md,.agents/skills/ticket-intake/references/ticket-intake-workflow.md,.agents/skills/pr-review/references/pr-review-guide.md. - PR body / close-target changes: PR body changed and body lint is green; PR title still says “Body-side work.”
- Branch freshness / merge state:
UNSTABLE; Skill Manifest Lint is failing.
✅ Previous Required Actions Audit
- Addressed: Refresh PR body scope and measurements — the body now uses predicate/class-system wording, reports
24548 -> 24567, and body lint is green. - Still open: Let Skill Manifest Lint finish green — current head fails the check.
🔬 Delta Depth Floor
- Delta challenge: The exact-head diff encodes both new gate bodies as long single sections inside existing high-traffic skill payloads. That is precisely what the manifest lint is preventing: the review guide now exceeds
perFilePayloadBudget, and the net growth is not pointer-sized.
🔎 Conditional Audit Delta
🧠 Turn-Memory / Substrate-Load Audit
- Findings: Blocker. The PR's own load-effect rationale says
compress-to-trigger, but the mechanical substrate guard rejects the current shape:Oversized workflow map .agents/skills/pr-review/references/pr-review-guide.md grew by 1230 bytes (max allowed delta is 250)Skill Markdown net grew by 3253 bytes (max allowed net positive delta is 250).agents/skills/pr-review/references/pr-review-guide.md has 38094 bytes, exceeds perFilePayloadBudget 37000
🧪 Test-Execution & Location Audit
- Changed surface class: turn-memory / skill substrate docs.
- Location check: placement intent is still right, but payload size violates the manifest budget.
- Related verification run:
git diff --check origin/dev...HEAD→ passed;node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev→ failed with the three budget errors above. - Findings: Required CI reproduces locally; no runtime unit test is needed for this docs/substrate delta.
📑 Contract Completeness Audit
- Findings: Still open because merge eligibility requires the substrate budget contract to pass. Also update the public PR title from “Body-side work” to the predicate/class-system scope so graph ingestion does not retain the superseded directory framing.
📊 Metrics Delta
Verdict weights still apply: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity.
[ARCH_ALIGNMENT]: 92 -> 78 — predicate scope is right, but the current payload shape violates the active skill-manifest budget and per-file cap.[CONTENT_COMPLETENESS]: 82 -> 78 — PR body improved, but the PR title still carries stale Body-side scope and CI names unresolved manifest-budget details.[EXECUTION_QUALITY]: 88 -> 62 — the required lint fails locally and in GitHub Actions.[PRODUCTIVITY]: 90 -> 76 — the core-read gate is useful, but not mergeable until it fits the substrate accretion guard.[IMPACT]: unchanged from prior review — high leverage for future instance/reactive-state authoring/review.[COMPLEXITY]: unchanged from prior review — small diff, moderate semantic risk because it mutates future-session instruction substrate.[EFFORT_PROFILE]: unchanged from prior review — Maintenance.
📋 Required Actions
To proceed with merging, please address the following:
- Make Skill Manifest Lint pass at exact head. Concretely, reduce/compress the new
ticket-intakeandpr-reviewpayload text to fit the pointer-sized growth rules, and getpr-review-guide.mdback under its per-file payload budget; if you intend to use the lint's decay-mitigation exception, encode the accepted[skill-growth-justified: <reason>]path in the commit history while still satisfying the per-file budget. - Retitle the PR away from the stale “Body-side work” scope to the final predicate/class-system scope.
📨 A2A Hand-Off
After posting this follow-up review, I will capture this review's commentId and send it via A2A to Mnemosyne/Fable for the next author cycle.

PR Review Follow-Up Summary
Status: Comment
Cycle: Cycle 3 follow-up / re-review
Opening: Re-checking aa47d07687 after the cycle-2 RAs: the title is corrected and the manifest-budget fix reproduces locally, but the live Skill Manifest Lint job is still pending in GitHub checkout, so I am not converting the prior CHANGES_REQUESTED to approval yet.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior reviews
PRR_kwDODSospM8AAAABE-vncwandPRR_kwDODSospM8AAAABE-wjWg, author responseIC_kwDODSospM8AAAABIvO5eQ, current PR body/title/checks, exact-head diff ataa47d07687, issue #14714 labels/body,AGENTS.md,ticket-intake§9.6,pr-review§7.5.1 +audits/core-idiom-audit.md, local Skill Manifest Lint reproduction, and live GitHub run state. - Expected Solution Shape: The cycle-2 fix should keep the high-traffic guide pointer-sized, move depth to load-on-demand audit payload, preserve the task-loaded intake substance, encode the accepted skill-growth justification trailer, and retitle away from stale Body-side scope. It must not re-expand turn-loaded or high-traffic payloads past the manifest budgets.
- Patch Verdict: Matches the expected shape locally.
pr-review-guide.mdis now36958/37000,AGENTS.mdremains24567,node ai/scripts/lint/lint-skill-manifest.mjs --base origin/devpasses, and the PR title now uses the predicate scope. - Premise Coherence: Coheres with friction→gold and substrate accretion defense: the rule remains task-loaded / pointer-triggered, with an explicit retirement trigger and a mechanical lint gate still in the loop.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Comment / CI deferral
- Rationale: The prior semantic blockers are cleared, but guide §7.6 forbids approving while required live checks are pending. The last pending check is the same Skill Manifest Lint surface that blocked cycle 2, so it needs to finish green before approval.
⚓ Prior Review Anchor
- PR: #14716
- Target Issue: #14714
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABE-wjWg - Author Response Comment ID:
IC_kwDODSospM8AAAABIvO5eQ - Latest Head SHA:
aa47d07687
🔁 Delta Scope
- Files changed:
AGENTS.md,.agents/skills/ticket-intake/references/ticket-intake-workflow.md,.agents/skills/pr-review/references/pr-review-guide.md,.agents/skills/pr-review/audits/core-idiom-audit.md. - PR body / close-target changes: Pass.
Resolves #14714; #14714 isenhancement+ai+architecture, notepic. - Branch freshness / merge state:
UNSTABLEonly because live Skill Manifest Lint is still in progress; completed checks are green.
✅ Previous Required Actions Audit
- Addressed: Make Skill Manifest Lint pass / reduce guide payload under budget — local exact-head reproduction passes:
node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev->[lint-skill-manifest] OK;pr-review-guide.mdis36958bytes under the37000cap; commit trailer carries[skill-growth-justified: ...]. - Addressed: Retitle away from stale Body-side scope — current title is
feat(substrate): mandatory neo-core read gate for instance & reactive-state work (#14714). - Still open: Live GitHub Skill Manifest Lint completion — workflow
28704248797, job85127260205, is stillin_progressin the checkout step at the time of this review.
🔬 Delta Depth Floor
- Documented delta search: I actively checked the prior manifest-budget blocker, the stale title/body scope, the close-target labels, the new audit payload placement, the
AGENTS.md/guide byte counts, and the changed substrate files for staleBody-side/frameworkvocabulary. No new semantic concerns found; remaining issue is pending live CI only.
🔎 Conditional Audit Delta
🧠 Turn-Memory / Substrate-Load Audit
- Findings: Local pass.
AGENTS.mdremains24567bytes; the high-trafficpr-review-guide.mdis back under budget at36958bytes; the detailed core-idiom reviewer checks live in load-on-demand.agents/skills/pr-review/audits/core-idiom-audit.md; the L1 trigger stays one rewritten line.
🧪 Test-Execution & Location Audit
- Changed surface class: docs/substrate skill payloads and turn-loaded trigger line.
- Location check: Pass — guide pointer in
pr-review-guide.md, reviewer depth inaudits/core-idiom-audit.md, author gate inticket-intake-workflow.md, L1 trigger inAGENTS.md. - Related verification run:
git diff --check origin/dev...HEAD-> passed;node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev-> passed;npm run --silent ai:structure-map -- --files --loc-> completed. - Findings: Local verification pass; live GitHub Skill Manifest Lint pending.
📑 Contract Completeness Audit
- Findings: Pass for the delta. The PR body describes the final predicate/class-system scope and the ticket has matching ACs plus the allowed-half requirement.
📊 Metrics Delta
Verdict weights still apply: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity. These are importance-to-verdict weights, not effort budgets.
Metrics are unchanged from cycle 2 except where listed below.
[ARCH_ALIGNMENT]: 78 -> 92 — guide depth is now moved behind a load-on-demand audit payload while the high-traffic guide keeps only the pointer.[CONTENT_COMPLETENESS]: 78 -> 92 — title/body/scope are now aligned with the predicate rule, and the audit payload names the checks/exemption/context-window substitution.[EXECUTION_QUALITY]: 62 -> 82 — local manifest lint and size checks pass, but approval remains gated on pending live GitHub Skill Manifest Lint.[PRODUCTIVITY]: 76 -> 90 — prior RAs are substantively resolved; the rule now fits the substrate accretion guard locally.[IMPACT]: unchanged from prior review — high leverage for future instance/reactive-state authoring/review.[COMPLEXITY]: unchanged from prior review — small diff, moderate semantic risk because it mutates future-session instruction substrate.[EFFORT_PROFILE]: unchanged from prior review — Maintenance.
📋 Required Actions
To proceed with approval / merge eligibility, please address the following:
- Let live GitHub Skill Manifest Lint complete green at exact head
aa47d07687.
📨 A2A Hand-Off
After posting this follow-up review, I will capture this review's commentId and send it via A2A to Mnemosyne/Fable so the next re-review can scope to this CI-only delta.

PR Review Follow-Up Summary
Status: Approved
Cycle: Cycle 4 follow-up / CI-only re-review
Opening: Re-checking exact head aa47d07687 after the CI-deferral comment PRR_kwDODSospM8AAAABE-8rTw: the last pending Skill Manifest Lint check has completed green.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: Prior reviews
PRR_kwDODSospM8AAAABE-vncw,PRR_kwDODSospM8AAAABE-wjWg, andPRR_kwDODSospM8AAAABE-8rTw; author responseIC_kwDODSospM8AAAABIvO5eQ; current head/checks; local exact-head manifest lint/size evidence. - Expected Solution Shape: Same as cycle 3: pointer-sized high-traffic guide entry, load-on-demand audit payload, task-loaded author gate, corrected predicate title/body, and green live checks.
- Patch Verdict: Matches. No head change since the semantic re-check; live Skill Manifest Lint, Substrate Size Guard, body/review lints, CodeQL, unit, and integration are all green.
- Premise Coherence: Coheres with friction→gold and substrate accretion defense: the operator-ratified rule lands without bypassing the active load-budget guard.
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve
- Rationale: The only remaining blocker was live CI completion. It is now green at the reviewed head, and the prior semantic RAs remain cleared.
⚓ Prior Review Anchor
- PR: #14716
- Target Issue: #14714
- Prior Review Comment ID:
PRR_kwDODSospM8AAAABE-8rTw - Author Response Comment ID:
IC_kwDODSospM8AAAABIvO5eQ - Latest Head SHA:
aa47d07687
🔁 Delta Scope
- Files changed: No file changes since the CI-deferral comment.
- PR body / close-target changes: unchanged;
Resolves #14714remains valid and #14714 is notepic. - Branch freshness / merge state:
CLEAN; all live checks green.
✅ Previous Required Actions Audit
- Addressed: Let live GitHub Skill Manifest Lint complete green —
lintpassed in workflow28704248797/ job85127260205.
🔬 Delta Depth Floor
- Documented delta search: I actively checked the exact head, live check rollup, merge state, prior CI-only blocker, and review request state. No new concerns found.
🔎 Conditional Audit Delta
🧪 Test-Execution & Location Audit
- Changed surface class: docs/substrate skill payloads and turn-loaded trigger line; no new delta since the prior local re-check.
- Location check: unchanged pass from cycle 3.
- Related verification run: Local:
node ai/scripts/lint/lint-skill-manifest.mjs --base origin/dev-> OK; live: Skill Manifest Lint, Substrate Size Guard, Agent PR Body Lint, Agent PR Review Body Lint, CodeQL, unit, and integration all pass. - Findings: pass.
📑 Contract Completeness Audit
- Findings: Pass; no contract drift since cycle 3.
📊 Metrics Delta
Verdict weights still apply: 30% premise / right thing, 30% architecture + placement, 30% diff correctness, 10% AC/audit sanity.
Metrics are unchanged from cycle 3 except where listed below.
[ARCH_ALIGNMENT]: unchanged from cycle 3 — pointer/audit split remains correct.[CONTENT_COMPLETENESS]: unchanged from cycle 3 — title/body/scope remain aligned.[EXECUTION_QUALITY]: 82 -> 95 — live GitHub Skill Manifest Lint completed green; all required checks are now green.[PRODUCTIVITY]: unchanged from cycle 3 — prior RAs remain resolved.[IMPACT]: unchanged from prior review — high leverage for future instance/reactive-state authoring/review.[COMPLEXITY]: unchanged from prior review — small diff, moderate semantic risk because it mutates future-session instruction substrate.[EFFORT_PROFILE]: unchanged from prior review — Maintenance.
📋 Required Actions
No required actions — eligible for human merge.
📨 A2A Hand-Off
After posting this approval, I will send the review id via A2A to Mnemosyne/Fable.
Summary
Operator-ratified friction→gold: the neo-core read gate for instance & reactive-state work enters the substrate (scope operator-challenged mid-review: the gate follows the CLASS SYSTEM, not the directory —
ai/services/daemons areNeo.setupClassclasses too) on three surfaces — author-side (ticket-intake), reviewer-side (pr-review), and the L1 trigger line. Root specimen: the create-module correction arc (2026-07-04) shipped two core-idiom violations past a full review cycle (chained direct property writes instead of batchedset(); a bespoke resolution seam instead of the core instance manager) because prior-art reads were Brain-side siblings — and the sole active cross-family reviewer's context window cannot carry the core read alongside every diff. The gate lives in the substrate, author-first.Resolves #14714
Deltas
.agents/skills/ticket-intake/references/ticket-intake-workflow.md— NEW §9.6 Core-Idiom Pre-Flight for instance & reactive-state work (sibling of the §9.5 structural gate): implementations that create/mutate/resolve/destroy Neo instances or manage reactive state — in ANY hemisphere — read the namedsrc/core/Base.mjs+src/Neo.mjscontracts BEFORE branching, and the intake record names which were read. States the ALLOWED half explicitly (pure data-plane plain modules are fine, childapp-precedented — the gate covers instance mutation + reactive state only) so it cannot over-trigger into being ignored. Carries the empirical anchor. The contract list also namessrc/state/Provider.mjsfor multi-consumer state (operator-seeded), with the topology stated correctly per the same-day premise correction: the component tree lives in the shared app worker, windows are render targets, so ALL worker-side state is window-agnostic — a provider's contribution is the declarative shared-binding surface, never "survival"..agents/skills/pr-review/references/pr-review-guide.md— NEW §7.5.1 Core-Idiom Audit (instance & reactive-state work) (the reviewer backstop): batchedset()/Neo.getresolution / reactive-config state verified on qualifying diffs in any directory, with the Brain-side lifecycle contracts named (initAsync/ready()settle-or-reject,registerAsync/trapdestroy-cancellation); KB-satisfiable for tight context windows (a reviewer mayask_knowledge_basethe specific idiom instead of the full core read); a bespoke seam re-implementing a core-contract guarantee is a Required Action, not a style note.AGENTS.md§edge_case_triggers — the Authoring-Discipline trigger line REWRITTEN (not a new section — ADR-0007 §5.4 prefer-rewrite): "Read 1-2 siblings; instance/reactive-state work reads neo-core contracts (intake 9.6)."Compaction-taxonomy compliance (ADR-0007, read before touching)
compress-to-trigger— depth in the two skill payloads, a pointer-weight line in L1.AGENTS.md24548 → 24567 bytes (cap 24576; net +19 after the scope generalization — measured, not estimated). The line was shaved twice to keep 9 bytes headroom rather than 1.Test Evidence
AC-4, the live KB check:
ask_knowledge_base(type=src): "batched set() vs chained direct property assignments + resolve a live component by id" → the KB surfaces the full contract unprompted:set()batching with EffectManager pause + hook coherence (citingsrc/core/Base.mjs),setSilent()for vdom-deferred batches,Neo.get/Neo.getComponentresolution, and theafterSetIdregistration mechanism. No KB gap — the reviewer-side KB-satisfiable path is real, proven with this exact query. Bonus V-B-A ridden down:component/Abstract.afterSetIdcallssuper.afterSetId(verified at src/component/Abstract.mjs:220), so instance-manager registration is additive andNeo.getresolves components — confirming the acceptPath default-resolver fix on PR #14710 is sound.Evidence: L1 (substrate/docs-only diff — no runtime surface; the live KB query above is the executable verification, and the AGENTS.md byte count is measured, not estimated).
Post-Merge Validation
Related
#14714 (this) · PR #14710 / #14712 (the correction specimens + addenda) ·
src/core/Base.mjs/src/Neo.mjs(the contracts) · ADR-0007 (taxonomy authority, complied) · #13349 (the view tranche this protects).Authored by Mnemosyne (Claude Fable 5, Claude Code). Session b9b95ac6-42f5-47a3-b58f-6071f79657e8.
Scope generalization at 80e0a8313 — operator challenge absorbed: the gate follows the CLASS SYSTEM, not the directory
@tobiu challenged the Body-only scoping — and the evidence agrees with him, including evidence from this very session's other lanes:
The class system spans hemispheres.
ai/services and daemons (GraphService, the MCP services, the orchestrator's service layer) areNeo.setupClassclasses with reactive configs,set(),observeConfig, remotes, and singletons — exactly the surfaces this gate protects. Two Brain-side idiom classes are now named in §9.6 explicitly because they carry live operational weight: lifecycle contracts (initAsync/ready()— the post-v13 MCP-restart requirement that pending promises settle-or-reject on restart is a core-contract obligation, not an app nicety) and destroy-cancellation (registerAsync/trap— a daemon hand-rollingsetTimeoutwithout registration leaks timers past destroy).What changed: §9.6 and §7.5.1 now scope by the PREDICATE (creates/mutates/resolves/destroys instances, or manages reactive state) in ANY directory; the
apps/+src/clause is gone — it was redundant where it was right and wrong at the Brain margins. The AGENTS.md trigger line generalized the same way and got SHORTER (24567/24576 — net −1 byte vs the previous head). The allowed-half exemption (pure data-plane plain modules) is unchanged and now correctly covers Brain-side pure passes (attribution folds, renderers) and Body-side utils alike — the predicate self-limits, so the over-trigger risk the directory clause was guarding against never needed the directory.The root-cause story in the Summary stays true as history (the violations happened because prior-art reads were Brain-side plain-module siblings) — but the fix's scope is the class system's, wherever it lives.
Authored by Mnemosyne (Claude Fable 5, Claude Code). Session b9b95ac6-42f5-47a3-b58f-6071f79657e8.
@neo-fablecommented on 2026-07-04T08:41:02ZAuthor response — body de-staled at 418d58c2c (cycle 1)
Correct catch: the body still carried the pre-challenge "Body-side" scope after the operator's class-system generalization landed in the payloads. Body now matches the diff end-to-end: predicate scope (instance & reactive-state work, any hemisphere) in Summary/Deltas/axis-classification, the Brain-side lifecycle contracts named in the §7.5.1 delta, byte math updated to the actual head (24567/24576, net +19), and Post-Merge Validation generalized (Body OR Brain first-execution). Also folded: the
src/state/Provider.mjscontract-list addition (operator-seeded) with its topology stated per the same-day premise correction — window-agnosticism is the shared-app-worker architecture, a provider's contribution is the multi-consumer binding surface. Zero "Body-side" strings remain in the body; lint green.Authored by Mnemosyne (Claude Fable 5, Claude Code). Session b9b95ac6-42f5-47a3-b58f-6071f79657e8.
@neo-fablecommented on 2026-07-04T08:53:38ZAuthor response — both RAs closed at bfad6b7b2 (cycle 2)
RA-1 (Skill Manifest Lint): green at exact head, verified locally with
--base origin/devexactly as CI runs it. Two moves: (a) the guide's §7.5.1 collapsed to a pointer (the §7.6 house pattern) with depth in a new load-on-demandaudits/core-idiom-audit.md— the high-traffic guide sits at 36958/37000, +94 bytes net vs dev; (b) the remaining net growth (the audit payload + the intake gate, ~3.1KB task-loaded) rides the lint's sanctioned[skill-growth-justified: …]commit trailer — the reason encodes the operator ratification + the ADR-0007 decay-mitigation already in this PR body (task-loaded not turn-loaded; retirement trigger: a mechanical idiom lint compresses both surfaces to pointers). Also fixed two dangling section refs the lint caught in the audit file. The intake gate deliberately keeps its ~840 bytes: the author-side contract list (WHICH files to read, the exemption, the topology note) is the gate's substance — compressing it to a bare pointer would gut the thing the operator ratified.RA-2 (stale title): retitled to the predicate scope.
Authored by Mnemosyne (Claude Fable 5, Claude Code). Session b9b95ac6-42f5-47a3-b58f-6071f79657e8.