Context
#17182 / PR #17199 repaired ai/scripts/maintenance/buildKbAgentFaqs.mjs after the KB flat-SDK migration. The script-plane lint now observes that repair, but its authority ledger still carries the retired import edge.
Current-head execution:
$ node ai/scripts/lint/lint-script-plane.mjs
1 ledger edge(s) no longer present — remove them from UNRESOLVED_EDGE_LEDGER:
- ai/scripts/maintenance/buildKbAgentFaqs.mjs::unresolved-specifier::../../mcp/server/knowledge-base/services/KBRecorderService.mjs
OK — no new authority conflicts; 12 unresolved edge(s), all known.
$ echo $?
0
The problem
The lint detects stale authority and tells the maintainer to remove it, but exits green. That is true for both authority ledgers in runLint():
resolved names entries in UNRESOLVED_EDGE_LEDGER that no longer reproduce.
- the equivalent stale set from
KNOWN_AUTHORITY_CONFLICTS is printed inline.
- the success predicate only considers
newConflicts and appeared.
The unit contract currently makes this permissiveness explicit: scriptPlaneClosure.spec.mjs asserts that a stale unresolved-edge entry returns exitCode: 0.
This contradicts the source contract that both lists may only shrink. The known-conflict JSDoc is sharper still: it says an entry that outlives its ticket fails the lint, while the implementation does not fail it.
Why this matters for the repository split
The script-plane report is an authority input to the AgentOS extraction proof. A repaired dependency edge remaining in the ledger overstates the unresolved boundary and lets obsolete exception authority survive indefinitely on a green board. The current KB row demonstrates the failure without a synthetic mutation.
Intended solution
Keep the identity-ledger design and make its shrink direction enforceable:
- Remove the repaired
buildKbAgentFaqs.mjs entry.
- Treat stale entries in either authority ledger as a lint failure, named individually.
- Preserve the existing behavior for genuinely current known edges/conflicts and for newly appeared edges.
This is one predicate correction, not a new lint or a ledger redesign.
Acceptance criteria
Out of scope
- Resolving the remaining current unresolved edges.
- Reclassifying the held temporal-summary conflict or changing its #17217 authority.
- Changing capability-closure taxonomy, executable-root census, or plane disposition.
- Broad cleanup of other lint baselines.
Avoided traps
- Replacing identities with a scalar count. The substitution falsifier must remain red.
- Deleting the current held conflict. It still reproduces; staleness must be measured, not inferred from age.
- Fixing only the one KB row. That would restore today's output but preserve the same advisory-only failure mode.
- Making every unresolved edge fail. Current named exceptions remain valid; only authority that no longer matches observation becomes red.
Evidence and duplicate sweep
- Direct CLI execution on current head reproduces the green stale-authority result.
- The production source and focused unit encode the same permissive predicate.
- #17182 is the closed producer repair; its PR is the provenance for the retired row, not a competing ticket.
- Live latest-open queue plus targeted searches for
script-plane ledger stale, buildKbAgentFaqs, and KBRecorderService found no open ticket for this predicate.
Evidence class: L3 — current production lint observation plus an executable unit-level mutation contract.
Related: #17500 · #17182 · PR #17199 · #17217
Origin Session ID: 0dc1379e-5329-4fba-80ca-f6466822f7c9
Retrieval hint: query_raw_memories("script-plane stale authority ledger buildKbAgentFaqs exitCode 0")
Context
#17182 / PR #17199 repaired
ai/scripts/maintenance/buildKbAgentFaqs.mjsafter the KB flat-SDK migration. The script-plane lint now observes that repair, but its authority ledger still carries the retired import edge.Current-head execution:
The problem
The lint detects stale authority and tells the maintainer to remove it, but exits green. That is true for both authority ledgers in
runLint():resolvednames entries inUNRESOLVED_EDGE_LEDGERthat no longer reproduce.KNOWN_AUTHORITY_CONFLICTSis printed inline.newConflictsandappeared.The unit contract currently makes this permissiveness explicit:
scriptPlaneClosure.spec.mjsasserts that a stale unresolved-edge entry returnsexitCode: 0.This contradicts the source contract that both lists may only shrink. The known-conflict JSDoc is sharper still: it says an entry that outlives its ticket fails the lint, while the implementation does not fail it.
Why this matters for the repository split
The script-plane report is an authority input to the AgentOS extraction proof. A repaired dependency edge remaining in the ledger overstates the unresolved boundary and lets obsolete exception authority survive indefinitely on a green board. The current KB row demonstrates the failure without a synthetic mutation.
Intended solution
Keep the identity-ledger design and make its shrink direction enforceable:
buildKbAgentFaqs.mjsentry.This is one predicate correction, not a new lint or a ledger redesign.
Acceptance criteria
buildKbAgentFaqs.mjsunresolved-specifier identity is removed fromUNRESOLVED_EDGE_LEDGER.exitCode: 1and reports that exact identity.exitCode: 1and reports that exact identity.exitCode: 0.node ai/scripts/lint/lint-script-plane.mjsexits 0 on the repaired repository state with no stale-authority notice.Out of scope
Avoided traps
Evidence and duplicate sweep
script-plane ledger stale,buildKbAgentFaqs, andKBRecorderServicefound no open ticket for this predicate.Evidence class: L3 — current production lint observation plus an executable unit-level mutation contract.
Related: #17500 · #17182 · PR #17199 · #17217
Origin Session ID: 0dc1379e-5329-4fba-80ca-f6466822f7c9
Retrieval hint:
query_raw_memories("script-plane stale authority ledger buildKbAgentFaqs exitCode 0")