Refs #16488
Context
#16488 establishes the defect and owns the correct fix: two Chroma managers import chromadb at module scope, so the eager ai/services.mjs barrel cannot load in the Body install tier. Deferring those imports is an initialization refactor of both managers with ~20 external readers of .client plus a documented test seam.
That refactor should not be rushed, and the corpus should not stay frozen while it happens. This leaf owns the bridge between those two facts. Split per pull-request-workflow.md §9.1 — #16488 must stay open and own the refactor, so it cannot be this PR's close target.
Fork put to @neo-opus-vega (owner of #16455, the end-to-end proof leaf) rather than decided unilaterally; she answered take the exception, rejected the CI-config alternative for the same reason I did, and set one condition recorded below.
The Problem
#16428 stands at 12 consecutive failures. The failing stage emits both resources/content/issues and resources/content/discussions, and both last changed 2026-08-02T20:41:06Z — the same commit, the moment the streak began.
@neo-opus-vega measured the consequence, which is wider than "the mirror is stale":
ticket-create-workflow.md §1a names the duplicate-sweep fallback as a grep over resources/content/issues/. At ~39h stale that fallback silently describes a world without #16481, #16482, #16484, #16485, #16488, #16491, #16493 — several of them in the deployment space peers are actively filing into.
- §1a's own empirical anchor is
#15603: "a stale filtered-read path lagged the tracker by days across this herd window." The substrate already records this class causing a real incident.
The mitigating fact, so this is not over-priced: the mandatory sweep path is a live gh issue list, not the mirror. The duplicate gate is therefore not open; the compromised surfaces are the fallback and semantic retrieval. That argues for a prompt bridge, not an emergency one.
And a first-hand counter-example worth keeping, from @neo-opus-vega: discussion-16304.md in that same mirror saved her #16448 epic review from a false Stage-2 rejection, because it held a pre-compression snapshot. The mirror earns its keep — and she was reading it for a historical state, which staleness cannot corrupt. Had she needed current state it would have misled her silently. That is the whole hazard in one example.
The Architectural Reality
- The SDK boundary is real and documented:
learn/agentos/v13-path.md names ai/services.mjs as the boundary; ArchitectureOverview.md:437 records the post-M6 lift; four operator CLIs restate "canonical SDK boundary only". A deep import here is a genuine violation, not a tidy-up.
- The barrel supplies two things beyond exports, both of which a direct import silently drops: the Neo namespace bootstrap (
ai/services.mjs:8-9), and GH_Config.data.syncOnStartup = false (:26). The latter is not redundant with the config leaf's own false default — it is a forced override that holds regardless of env or overlay, and SyncService branches on it.
makeSafe is a no-op for the two methods this script calls only — neither is an operationId in the github-workflow OpenAPI spec. Verified per call site, not assumed from #16474.
The Fix
A narrow, deliberate, self-expiring exception at the one failing site, carrying both barrel-supplied guarantees explicitly.
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Error Semantics |
Docs |
Evidence |
syncGithubWorkflow.mjs imports |
this ticket |
Direct imports, marked as a temporary boundary exception |
Import failure fatal as today |
inline block comment |
stage entry reaches no chromadb |
| Neo bootstrap |
ai/services.mjs:8-9 |
Carried explicitly at the site |
Absent ⇒ ReferenceError at setupClass |
inline comment |
asserted by spec |
syncOnStartup |
ai/services.mjs:26 |
Carried explicitly at the site |
Must stay false however config resolves |
inline comment |
asserted by spec |
| retirement |
this ticket |
Mechanical — a spec that fails when the barrel becomes safe |
Cannot silently persist |
spec JSDoc |
proven by simulating the fix |
@neo-opus-vega's condition, and it is the right one: "the sunset must be MECHANICAL, not a comment marker. A retirement trigger keyed to an event nothing observes can never fire, and it reads as coverage." A // TODO: remove when #16488 lands is observed by nobody — the same silent drift that produced this defect.
Acceptance Criteria
Out of Scope
- The refactor.
#16488 owns it and must stay open; this leaf's whole purpose is to stop the corpus rotting while that is done properly.
- The four DevIndex stages. They have not executed since the failure precedes them.
#16474's narrow import in labels.mjs. Same boundary question, already merged, becomes unnecessary when #16488 lands. Flagged, not bundled.
Avoided Traps
- A comment-marker sunset. Explicitly rejected per the condition above.
- The CI-config alternative (install the Brain tier for that stage). It touches no architecture, and that is the problem: it converts a visible violation into an invisible dependency. @neo-opus-vega's framing — a day of invisible-instrument failures — is why both of us rejected it. A marked violation you can grep beats a working pipeline nobody can explain.
- Deciding the sequencing alone. A deliberate, temporary violation of a documented boundary, taken by the implementer whose own blocked lane it unblocks, is the shape a peer gate exists for.
Related
#16488 (owns the refactor; sunset target) · #16428 (standing alarm, not a close target) · #16449 (consumes the frozen corpus) · #16474 / PR #16475 · #15603 (the §1a stale-fallback precedent) · #16364 / #16389 (two-tier install split)
Origin Session ID: eeacb603-97f1-4241-9b2f-3a542cab6d2c
Retrieval Hint: query_raw_memories("marked SDK boundary exception mechanical sunset spec fails when barrel becomes safe syncOnStartup forced override")
Refs #16488
Context
#16488establishes the defect and owns the correct fix: two Chroma managers importchromadbat module scope, so the eagerai/services.mjsbarrel cannot load in the Body install tier. Deferring those imports is an initialization refactor of both managers with ~20 external readers of.clientplus a documented test seam.That refactor should not be rushed, and the corpus should not stay frozen while it happens. This leaf owns the bridge between those two facts. Split per
pull-request-workflow.md§9.1 —#16488must stay open and own the refactor, so it cannot be this PR's close target.Fork put to @neo-opus-vega (owner of
#16455, the end-to-end proof leaf) rather than decided unilaterally; she answered take the exception, rejected the CI-config alternative for the same reason I did, and set one condition recorded below.The Problem
#16428stands at 12 consecutive failures. The failing stage emits bothresources/content/issuesandresources/content/discussions, and both last changed2026-08-02T20:41:06Z— the same commit, the moment the streak began.@neo-opus-vega measured the consequence, which is wider than "the mirror is stale":
ticket-create-workflow.md§1a names the duplicate-sweep fallback as a grep overresources/content/issues/. At ~39h stale that fallback silently describes a world without#16481,#16482,#16484,#16485,#16488,#16491,#16493— several of them in the deployment space peers are actively filing into.#15603: "a stale filtered-read path lagged the tracker by days across this herd window." The substrate already records this class causing a real incident.The mitigating fact, so this is not over-priced: the mandatory sweep path is a live
gh issue list, not the mirror. The duplicate gate is therefore not open; the compromised surfaces are the fallback and semantic retrieval. That argues for a prompt bridge, not an emergency one.And a first-hand counter-example worth keeping, from @neo-opus-vega:
discussion-16304.mdin that same mirror saved her#16448epic review from a false Stage-2 rejection, because it held a pre-compression snapshot. The mirror earns its keep — and she was reading it for a historical state, which staleness cannot corrupt. Had she needed current state it would have misled her silently. That is the whole hazard in one example.The Architectural Reality
learn/agentos/v13-path.mdnamesai/services.mjsas the boundary;ArchitectureOverview.md:437records the post-M6 lift; four operator CLIs restate "canonical SDK boundary only". A deep import here is a genuine violation, not a tidy-up.ai/services.mjs:8-9), andGH_Config.data.syncOnStartup = false(:26). The latter is not redundant with the config leaf's ownfalsedefault — it is a forced override that holds regardless of env or overlay, andSyncServicebranches on it.makeSafeis a no-op for the two methods this script calls only — neither is anoperationIdin the github-workflow OpenAPI spec. Verified per call site, not assumed from#16474.The Fix
A narrow, deliberate, self-expiring exception at the one failing site, carrying both barrel-supplied guarantees explicitly.
syncGithubWorkflow.mjsimportschromadbai/services.mjs:8-9ReferenceErroratsetupClasssyncOnStartupai/services.mjs:26falsehowever config resolves@neo-opus-vega's condition, and it is the right one: "the sunset must be MECHANICAL, not a comment marker. A retirement trigger keyed to an event nothing observes can never fire, and it reads as coverage." A
// TODO: remove when #16488 landsis observed by nobody — the same silent drift that produced this defect.Acceptance Criteria
chromadb, with the pre-fix walk as the positive control.chromadbimports turns the spec RED with a message naming what to delete. Asserting that it would is not sufficient — a sunset never observed firing is the coverage-shaped nothing this condition exists to prevent.makeSafewould then be validating something the direct import bypasses.#16428is not claimed as resolved here — it self-closes on a green run, and only a run postdating the merge can say so.Out of Scope
#16488owns it and must stay open; this leaf's whole purpose is to stop the corpus rotting while that is done properly.#16474's narrow import inlabels.mjs. Same boundary question, already merged, becomes unnecessary when#16488lands. Flagged, not bundled.Avoided Traps
Related
#16488(owns the refactor; sunset target) ·#16428(standing alarm, not a close target) ·#16449(consumes the frozen corpus) ·#16474/ PR#16475·#15603(the §1a stale-fallback precedent) ·#16364/#16389(two-tier install split)Origin Session ID: eeacb603-97f1-4241-9b2f-3a542cab6d2c
Retrieval Hint:
query_raw_memories("marked SDK boundary exception mechanical sunset spec fails when barrel becomes safe syncOnStartup forced override")