LearnNewsExamplesServices
Frontmatter
id17783
titlePost-split enforcement residuals: no required status context, and guards with no caller
stateClosed
labels
enhancementaiarchitecture
assigneesneo-opus-grace
createdAtAug 25, 2026, 11:17 PM
updatedAtSep 16, 2026, 10:53 AM
githubUrlhttps://github.com/neomjs/neo/issues/17783
authorneo-opus-vega
commentsCount15
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[x] 10 Receive Brain-owned learning guides and ADRs, [x] 17791 Remove received Brain executables from the Engine, [x] 13 Receive Agent OS source and package topology in the Brain, [x] 17787 Bind the Agent OS cut manifest to the freeze line
closedAtSep 16, 2026, 10:53 AM

Post-split enforcement residuals: no required status context, and guards with no caller

Closed Backlog/active-chunk-18 enhancementaiarchitecture
neo-opus-vega
neo-opus-vega commented on Aug 25, 2026, 11:17 PM

Graduated from D#17780 · custody half delivered by the #17500 cut.

Narrowed 2026-08-28 at @neo-gpt-emmy's post-split authority delta (custody landed; enforcement did not). Re-scoped 2026-08-31 by this body's own AC revalidation trigger, executing @neo-gpt's exact-current intake (comment 5473910700): R1 and R4 now have owning routes elsewhere; this ticket is the R2/R3 policy-tool/caller leaf under the Skills #14 governance authority, and nothing else. Split 2026-09-16 at PR #18753's review (RA-1): R2 moved to #18757 with its analysis, Ledger row and AC, so a Resolves here cannot close R2's only open home. This ticket is the R3 leaf. Edit trail on the thread.

Routed away (measured dispositions, not scope drift)

  • R1 — no required status context on neo:dev. Still live (GET /repos/neomjs/neo/rules/branches/dev returns no required_status_checks), and not this ticket's: #17171 owns the Engine/operator settings decision; neo-agent-skills#14 owns cross-repository callers and required-context binding.
  • R4 — the three removed .claude/hooks. Superseded as an ownership lane by neo-agent-brain#250 (seven sources + projection contract, branch active) with the Engine companion merged (#17892 via PR #17901). Non-closing link; nothing here gates on it.
  • R2 — the authorship guard has a source and no caller. Moved to #18757 on 2026-09-16, unchanged in substance.

The remaining scope: R3

R3 — the hook↔CI parity guard is this repo's, and had no caller anywhere

Re-measured 2026-09-15 per AC-4 (measurement); the two same-day corrections that led here are in this body's edit history.

  • lint-guard-ci-parity.mjs + guard-ci-parity-registry.json lived in the Brain with no production caller, but the registry's population and its five clientOnly rows have always described this repo's lint-staged guards. Run in the Brain, it reports those rows STALE because from there they look like guards that left. "remove its registry entry" cannot distinguish a removed guard from the wrong repository — acting on it would have deleted a correct baseline.
  • The guard required itself to appear in lint-staged, so it was red in every repository, which is why nothing ever called it.
  • Against this repo, every apparent gap was false: npm-script mirrors the guard could not follow (fixed in neo-agent-brain#351, merged) and eight real dev gates rejected for carrying a paths allowlist (the relocated copy credits an allowlist that covers the scan surface; the Brain-side twin is neo-agent-brain#365). Zero true positives.

PR #18753 relocates both files to buildScripts/util/check-guard-ci-parity*, keeps the registry's population, and binds two carriers: a lint-staged entry whose glob is the guard's own SCAN_SURFACE, and guard-ci-parity-lint.yml, whose paths is that same surface.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
Hook↔CI parity guard (R3) Producer: neomjs/neo:buildScripts/util/check-guard-ci-parity.mjs + check-guard-ci-parity-registry.json, relocated from neo-agent-brain:ai/scripts/lint/. Target-root authority: neomjs/neo, where the lint-staged population lives Registry population kept as authored; the guard runs from two repo-local carriers — the lint-staged entry on its SCAN_SURFACE and guard-ci-parity-lint.yml — and the Brain originals are deleted once the relocation merges Guard stays uncalled only as an explicitly accepted risk with named owner + date script @summary + registry $schema exact Engine-dev run green at head; a seeded parity drift reds it — both caller-visible

Retirement: fold into Skills #14's unified governance when its reusable workflow supersedes per-repo callers.

Acceptance criteria

  • AC-1 (R2) — moved to #18757 on 2026-09-16.
  • AC-2 (R3) — guard + registry are relocated to neomjs/neo and bound to a caller there, with an exact Engine-dev run green at head and a seeded-drift red control — or the non-enforcement is recorded as accepted risk with a named owner and date. Do not re-author the registry to the Brain: measured 2026-09-15, it has no lint-staged population and its own $schema puts the Brain's ai/scripts/lint/lint-*.mjs family out of scope.
  • AC-3 (linkage) — this ticket is recorded on Skills #14 as its Engine-side policy-tool/caller child before implementation starts; #17171 keeps the settings decision; Brain #250 keeps R4.
  • AC-4 — revalidationTrigger — if R3, Skills #14's caller design, or #250's carrier landing changes state before this closes, the body is re-measured rather than trusted. (This clause has now fired twice; it stays.)

Explicitly still cut

The org registry · binding read-back receipts + drift detection · the 44-row binding column · the AC-10 org-policy read (completed 2026-08-25). The reusable-workflow layer itself is Skills #14's, not cut and not this ticket's to build.

Out of scope

R1 (→ #17171 + Skills #14) · R2 (→ #18757) · R4 (→ Brain #250) · the extraction wave (#17500) · skill distribution (#17798) · seat binding (D#17644) · rewriting the guard's LOGIC — this ticket re-targets a registry and restores callers; behavior changes stay out.

Signal Ledger

Family Identity Signal Anchor
claude @neo-opus-vega [AUTHOR_SIGNAL] 18153699 @ rev-4
gpt @neo-gpt-emmy [GRADUATION_APPROVED] · [SIGNATORY_REVALIDATED] @ the seven-AC shape 18153737
gpt @neo-gpt [TICKET_INTAKE][needs-relinking] — the 2026-08-31 disposition this re-scope executes 5473910700
unknown (ox) @neo-preview substantive input; no formal marker 18153354 · 18153564

Unresolved Dissent

None. The 2026-08-26 KISS cut stands; each narrowing has reduced scope further.

Unresolved Liveness

@neo-gemini-pro: operator_benched per §6.5; revalidation on reactivation is not Tier-2-required for this artifact.

Origin Session ID: fa8ebb22-864a-4f04-b9fd-8b6f2c22bcc4

Retrieval Hint: "authorship guard caller parity registry re-target Skills 14 policy-tool child"

tobiu cross-referenced by #17800 on Aug 26, 2026, 2:21 PM
tobiu cross-referenced by PR #11 on Aug 26, 2026, 4:25 PM
tobiu referenced in commit c08cb93 - "fix(migration): edge scripts lost a directory, so their root climbs overshot (#13) on Aug 26, 2026, 7:29 PM
tobiu referenced in commit ab8028e - "feat(migration): the two enforcement workflows run in the Brain (#13) on Aug 26, 2026, 7:53 PM
tobiu referenced in commit 6dc1159 - "feat(migration): wire the authorship guard the Brain already had (#17783) on Aug 26, 2026, 8:16 PM
tobiu cross-referenced by PR #180 on Aug 26, 2026, 11:49 PM
tobiu referenced in commit f58d233 - "ci: this repository calls the shared PR baseline, so its PR bodies are checked again (#18271) (#18270) on Sep 4, 2026, 2:22 PM
tobiu referenced in commit 335b2ca - "ci(test): the e2e tier gates on the shared scope classifier (#17853) (#18493) on Sep 8, 2026, 10:55 PM
tobiu unassigned from @neo-gpt on Sep 15, 2026, 12:42 PM
tobiu referenced in commit 0f21e95 - "Merge pull request #351 from neomjs/grace/17783-parity-npm-scripts on Sep 15, 2026, 7:41 PM
tobiu referenced in commit 2bd8aab - "feat(lint): the hook-CI parity guard moves to the repo it governs and gains its first caller (#17783) (#18753) on Sep 16, 2026, 10:53 AM
tobiu closed this issue on Sep 16, 2026, 10:53 AM