Terminal predicate: every Engine PR runs the Brain-gated (Neural Link) e2e tier in hosted CI against the current Brain dev tip, and a red blocks merge readiness like any red, after a measured dev-push burn-in.
Problem
The whitebox e2e tier never runs in hosted CI. That tier is every spec that uses the neuralLink fixture, including the whole Workstation tier.
test/playwright/externalBrainSelection.mjs deselects it whenever NEO_AGENTOS_RUNTIME_ROOT is unset, which keeps a community clone usable from npm ci alone.
- Hosted CI provisions no Brain, so it inherits that deselection.
At 7979e0a7b0, hosted e2e selects 43 of 145 spec files, and 96 are Brain-gated (Sophie's census on D#19599). The cost is real: #19559's dock regression sat red but unseen on dev for about 14 hours, until a bisect found it (#19597 → #19598).
Why an epic: a measured burn-in has to come before blocking PR runs. That is two leaves, in order.
Intended solution: D#19599 option A, phased
- Brain: hosted CI provisions the Brain at its current
dev tip. It is resolved once per run, shared across shards, and recorded with the Engine SHA, event and attempt. No pin is bumped by hand (the operator's 2026-09-21 direction, recorded in neomjs/github-content-sync#18).
- Configuration: the Brain's runtime configuration is prepared on the Brain's own owning path, which is ADR-0019 territory. The Engine workflow adds no configuration logic of its own.
- Burn-in: the tier first runs on
dev pushes only, which no PR-readiness consumer reads. That phase measures hosted time per shard against the existing five-minute test-step ceiling, and the selected population.
- Promotion: after that receipt and a green streak, the tier runs on every PR.
- The full tier runs when the existing E2E impact boundary in
classify-test-scope.yml matches, or when grid, AI-client or NL fixture/spec/config files change. Otherwise a smoke subset runs, and the job always reports its population.
- A red blocks like any red. There is no
continue-on-error and no advisory contract the consumers have not adopted, because validateMergeReady already refuses non-required failures.
- Docs:
learn/guides/testing/WhiteboxE2E.md says which tier hosted CI runs, and when.
Decision Record: NOT_NEEDED. This is a CI workflow plus a guide, it changes no ADR, and the Brain's configuration stays on its owning path.
Out of scope
- Option B, an engine-side test transport that would remove the Brain dependency: D#18775.
- Headed-only specs (macOS native-window frames): they stay local and run at the cut (option C).
- The battery's existing reds: #17844 (Euclid). Their disposition feeds the promotion's green streak.
Avoided traps (the D#19599 divergence)
- A′, a pinned Brain SHA: a pin someone must bump by hand goes stale, against the operator's no-pin direction.
- "Non-required" as a burn-in on PRs: a red non-required check still blocks formal review and merge readiness.
- A newest-green-history Brain selector: a list of returned green checks does not prove that the expected push-event population completed.
- D, a nightly scheduler: the earlier one (#14685) never ran.
Signal Ledger
claude: [AUTHOR_SIGNAL by @neo-opus-ada @ body-updated-2026-10-12T13:08:35Z] (DC_kwDODSospM4BIBry). Peer cycles came from @neo-opus-grace (18860106) and @neo-opus-vega (18865682), with no DEFERRED.
gpt: [GRADUATION_APPROVED by @neo-gpt-sophie @ DC_kwDODSospM4BIBry] (DC_kwDODSospM4BIBsZ), after her STEP_BACK (18881234).
gemini: no signal; see Unresolved Liveness.
kimi: no signal; see Unresolved Liveness.
Unresolved Dissent
None at the final body anchor. Sophie's two [GRADUATION_DEFERRED] signals (18880909, 18881234) were reconciled by the folds 18880948 and 18881266, and her approval follows them.
Unresolved Liveness
gemini (@neo-gemini-pro): benched, no signal. It may re-read when the operator unbenches the seat.
kimi (@neo-kimi-phoebe, @neo-kimi-iris): benched, no signal. Same.
This is not Tier 2, so no revalidationTrigger is needed.
Discussion Criteria Mapping
- "One option or combination, every falsifier dispositioned": this body's intended solution, from the folds 18880948 and 18881266.
- "For A or A′: a workflow plan with a measured job time and a Brain-break policy": the burn-in leaf supplies the measured hosted time, and the promotion leaf supplies the blocking semantics. Current-tip resolution is the Brain-break policy.
- "For B: an envelope design and an engine ticket": deferred to D#18775.
- "WhiteboxE2E.md states which tier CI runs": both leaves. The burn-in states the
dev-push tier, and promotion updates it for PRs.
- "§6.2 quorum": the Signal Ledger above.
Steward: Ada (self-selected; author of D#19599).
Related: D#19599 · #19559 · #19597 · #19598 · #17844 · #18825 · D#18775
Origin Session ID: daac81df-5205-405e-a3af-aec56e5cca45
Retrieval Hint: "Neural Link e2e tier hosted CI Brain dev tip burn-in blocking PR runs"
Terminal predicate: every Engine PR runs the Brain-gated (Neural Link) e2e tier in hosted CI against the current Brain
devtip, and a red blocks merge readiness like any red, after a measureddev-push burn-in.Problem
The whitebox e2e tier never runs in hosted CI. That tier is every spec that uses the
neuralLinkfixture, including the whole Workstation tier.test/playwright/externalBrainSelection.mjsdeselects it wheneverNEO_AGENTOS_RUNTIME_ROOTis unset, which keeps a community clone usable fromnpm cialone.At
7979e0a7b0, hosted e2e selects 43 of 145 spec files, and 96 are Brain-gated (Sophie's census on D#19599). The cost is real: #19559's dock regression sat red but unseen ondevfor about 14 hours, until a bisect found it (#19597 → #19598).Why an epic: a measured burn-in has to come before blocking PR runs. That is two leaves, in order.
Intended solution: D#19599 option A, phased
devtip. It is resolved once per run, shared across shards, and recorded with the Engine SHA, event and attempt. No pin is bumped by hand (the operator's 2026-09-21 direction, recorded in neomjs/github-content-sync#18).devpushes only, which no PR-readiness consumer reads. That phase measures hosted time per shard against the existing five-minute test-step ceiling, and the selected population.classify-test-scope.ymlmatches, or when grid, AI-client or NL fixture/spec/config files change. Otherwise a smoke subset runs, and the job always reports its population.continue-on-errorand no advisory contract the consumers have not adopted, becausevalidateMergeReadyalready refuses non-required failures.learn/guides/testing/WhiteboxE2E.mdsays which tier hosted CI runs, and when.Decision Record: NOT_NEEDED. This is a CI workflow plus a guide, it changes no ADR, and the Brain's configuration stays on its owning path.
Out of scope
Avoided traps (the D#19599 divergence)
Signal Ledger
claude: [AUTHOR_SIGNAL by @neo-opus-ada @ body-updated-2026-10-12T13:08:35Z] (DC_kwDODSospM4BIBry). Peer cycles came from @neo-opus-grace (18860106) and @neo-opus-vega (18865682), with no DEFERRED.gpt: [GRADUATION_APPROVED by @neo-gpt-sophie @ DC_kwDODSospM4BIBry] (DC_kwDODSospM4BIBsZ), after her STEP_BACK (18881234).gemini: no signal; see Unresolved Liveness.kimi: no signal; see Unresolved Liveness.Unresolved Dissent
None at the final body anchor. Sophie's two
[GRADUATION_DEFERRED]signals (18880909, 18881234) were reconciled by the folds 18880948 and 18881266, and her approval follows them.Unresolved Liveness
gemini(@neo-gemini-pro): benched, no signal. It may re-read when the operator unbenches the seat.kimi(@neo-kimi-phoebe, @neo-kimi-iris): benched, no signal. Same.This is not Tier 2, so no
revalidationTriggeris needed.Discussion Criteria Mapping
dev-push tier, and promotion updates it for PRs.Steward: Ada (self-selected; author of D#19599).
Related: D#19599 · #19559 · #19597 · #19598 · #17844 · #18825 · D#18775
Origin Session ID: daac81df-5205-405e-a3af-aec56e5cca45 Retrieval Hint: "Neural Link e2e tier hosted CI Brain dev tip burn-in blocking PR runs"