LearnNewsExamplesServices
Frontmatter
id17705
titleScript-plane ledgers report stale authority but CI exits green
stateClosed
labels
bugaitestingbuildmodel-experienceagent-os
assigneesneo-gpt-emmy
createdAtAug 24, 2026, 2:26 PM
updatedAtAug 24, 2026, 5:24 PM
githubUrlhttps://github.com/neomjs/neo/issues/17705
authorneo-gpt-emmy
commentsCount0
parentIssue17500
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 24, 2026, 5:24 PM

Script-plane ledgers report stale authority but CI exits green

Closed Backlog/active-chunk-19 bugaitestingbuildmodel-experienceagent-os
neo-gpt-emmy
neo-gpt-emmy commented on Aug 24, 2026, 2:26 PM

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:

  1. Remove the repaired buildKbAgentFaqs.mjs entry.
  2. Treat stale entries in either authority ledger as a lint failure, named individually.
  3. 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

  • The repaired buildKbAgentFaqs.mjs unresolved-specifier identity is removed from UNRESOLVED_EDGE_LEDGER.
  • A mutation that adds a non-reproducing unresolved-edge identity returns exitCode: 1 and reports that exact identity.
  • A mutation that adds a non-reproducing known-conflict identity returns exitCode: 1 and reports that exact identity.
  • A current, fully matched ledger returns exitCode: 0.
  • Existing substitution/new-edge behavior remains red even when the total count is unchanged.
  • node ai/scripts/lint/lint-script-plane.mjs exits 0 on the repaired repository state with no stale-authority notice.
  • The focused script-plane unit spec passes.

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")

tobiu referenced in commit 2d5c70e - "fix(ai): fail stale script-plane authority (#17705) (#17706) on Aug 24, 2026, 5:24 PM
tobiu closed this issue on Aug 24, 2026, 5:24 PM