Split out of #13517 by the triage seat (R+145) on the domain:engine seat's selection read. The precondition the original ruling set — "decide it after item 1, when the population is known" — is now met.
Why now and not before
The prior ruling deliberately deferred this: building the ratchet while only packages/qa/dogfood carried the declaration would have legislated for a population of one. ⇒ Item 1 has landed (PR #14016), and the population is known: 4 app-booting suites, and all 4 took the declaration — packages/qa/dogfood, packages/objectql, packages/verify, packages/runtime.
The gap
scripts/check-console-intercept-disarm.mjs ratchets the console disarm across all 72 vitest-running packages. No gate ratchets a log level. ⇒ A future edit can delete env: { OS_REGISTRY_LOG: 'warn' } from any of the four harnesses and only someone reading a CI shard log would notice — the suites stay green, the outcomes are unchanged, and the only symptom is tens of thousands of lines coming back.
That is not hypothetical arithmetic: the four declarations together removed ~47,900 console-carried lines (dogfood −39,764; objectql −4,679; verify −2,323; runtime −1,146).
Shape of the work
Extend check-console-intercept-disarm.mjs, or add a sibling in the same shape, to require a declared registry log level in the suites that boot apps.
⚠️ The population predicate is the whole design question, and it is not "all 72". Most suites never boot an engine and have no registry to quiet; requiring the key everywhere would be noise, and requiring it nowhere is today's state. ⇒ Establish what makes a suite "app-booting" as a derived predicate rather than a hand-listed roster of four — a hand list is the drift this repo files findings about weekly. If no honest predicate exists, say so and declare the four with their reason, the way the bare-root worklist records refusals.
⭐ Reuse the existing gate's proven shape: it already walks every vitest-running package and reports a per-package verdict, so the walk is done and only the assertion is new.
⛔ Out of scope: changing any suite's level, packages/objectql's shipped default (still 'info' at registry.ts:1265, and it must stay), and anything that makes library code aware of a test runner.
priority:p3
Nothing is broken today — all four declarations are in place. This buys that they stay, and the cost of losing one silently is a five-figure line count nobody is watching for.
Refs: #13517 (origin, and the three-way remainder) · PR #13985 (dogfood) · PR #14016 (the other three) · scripts/check-console-intercept-disarm.mjs.
Split out of #13517 by the triage seat (R+145) on the
domain:engineseat's selection read. The precondition the original ruling set — "decide it after item 1, when the population is known" — is now met.Why now and not before
The prior ruling deliberately deferred this: building the ratchet while only
packages/qa/dogfoodcarried the declaration would have legislated for a population of one. ⇒ Item 1 has landed (PR #14016), and the population is known: 4 app-booting suites, and all 4 took the declaration —packages/qa/dogfood,packages/objectql,packages/verify,packages/runtime.The gap
scripts/check-console-intercept-disarm.mjsratchets the console disarm across all 72 vitest-running packages. No gate ratchets a log level. ⇒ A future edit can deleteenv: { OS_REGISTRY_LOG: 'warn' }from any of the four harnesses and only someone reading a CI shard log would notice — the suites stay green, the outcomes are unchanged, and the only symptom is tens of thousands of lines coming back.That is not hypothetical arithmetic: the four declarations together removed ~47,900 console-carried lines (dogfood −39,764; objectql −4,679; verify −2,323; runtime −1,146).
Shape of the work
Extend
check-console-intercept-disarm.mjs, or add a sibling in the same shape, to require a declared registry log level in the suites that boot apps.⭐ Reuse the existing gate's proven shape: it already walks every vitest-running package and reports a per-package verdict, so the walk is done and only the assertion is new.
⛔ Out of scope: changing any suite's level,
packages/objectql's shipped default (still'info'atregistry.ts:1265, and it must stay), and anything that makes library code aware of a test runner.priority:p3Nothing is broken today — all four declarations are in place. This buys that they stay, and the cost of losing one silently is a five-figure line count nobody is watching for.
Refs: #13517 (origin, and the three-way remainder) · PR #13985 (dogfood) · PR #14016 (the other three) ·
scripts/check-console-intercept-disarm.mjs.