Filed by the PM seat from PR #9706's open question 3. Ruled: B for now (leave the filter alone), C as the shape to reach for — this card is C.
The gap
#9667's headline scenario — a spec-only PR gets a console dist whose bundled @objectstack/spec lags this tree — is still unverified after PR #9706, and the reason is one layer earlier than the cache key that card was about.
ci.yml's console paths filter is exactly (verified at ci.yml:102-106):
console:
- '.objectui-sha'
- 'scripts/build-console.sh'
- 'scripts/check-console-sha.mjs'
- '.github/workflows/ci.yml'
and the job is if: needs.filter.outputs.console != 'false'. packages/spec/** is not there, so a spec-only PR never runs Console Pin Gate, never restores the cache, and never reaches PR #9706's new check:console-injection step.
PR #9706 is still correct and worth having: it verifies every run that actually consumes a restored dist (pin bumps, build-console.sh edits, ci.yml edits, and the whole release path). It just does not, by itself, put a spec-only PR in front of the gate.
⛔ The obvious fix is rejected
Adding packages/spec/** to the console filter makes the job run on every spec PR — and on a cache hit it still pays checkout + pnpm install + turbo run build --filter=@objectstack/client... (spec + core + client) before reaching the cheap assertions.
That is per-spec-change CI cost, which is the exact axis#9667's option A was rejected on (a full cold console rebuild ~20 min on a repo doing ~18 merges/day). Reversing that one question later would be incoherent.
The shape
A separate, much lighter job, filtered on packages/spec/**, that:
- restores only the console dist from the existing cache key — no
pnpm install, no turbo build; - runs the single node process
pnpm check:console-injection --require-stamp against it; - does nothing at all on a cache miss (no dist to check is not a failure).
The stamp PR #9706 writes into dist/.objectstack-injection.json is content-replayed, so this needs no build tree and no network — which is what makes the light job possible at all.
Open questions for whoever takes it
- Can a job restore that cache without
pnpm install? The check is a plain node script, but confirm pnpm check:console-injection is reachable without a full workspace install — if it is not, invoke the script directly with node, the way lint.yml already does for gates whose alias would otherwise need root package.json. - What should a cache MISS do? Recommended: succeed silently. A spec-only PR with no cached dist has nothing to be stale.
- Is the added job worth its own runner slot, given the failure it catches is advisory (
Console Pin Gate is not among the six required contexts — I read the live ruleset)? Price it before building.
⚠️ Sequencing: blocked until PR #9706 lands.
Refs: #9667 · PR #9706 · #8134 / PR #9660
Generated by Claude Code
Filed by the PM seat from PR #9706's open question 3. Ruled: B for now (leave the filter alone), C as the shape to reach for — this card is C.
The gap
#9667's headline scenario — a spec-only PR gets a console dist whose bundled
@objectstack/speclags this tree — is still unverified after PR #9706, and the reason is one layer earlier than the cache key that card was about.ci.yml'sconsolepaths filter is exactly (verified atci.yml:102-106):and the job is
if: needs.filter.outputs.console != 'false'.packages/spec/**is not there, so a spec-only PR never runs Console Pin Gate, never restores the cache, and never reaches PR #9706's newcheck:console-injectionstep.PR #9706 is still correct and worth having: it verifies every run that actually consumes a restored dist (pin bumps,
build-console.shedits,ci.ymledits, and the whole release path). It just does not, by itself, put a spec-only PR in front of the gate.⛔ The obvious fix is rejected
Adding
packages/spec/**to theconsolefilter makes the job run on every spec PR — and on a cache hit it still pays checkout +pnpm install+turbo run build --filter=@objectstack/client...(spec + core + client) before reaching the cheap assertions.That is per-spec-change CI cost, which is the exact axis#9667's option A was rejected on (a full cold console rebuild ~20 min on a repo doing ~18 merges/day). Reversing that one question later would be incoherent.
The shape
A separate, much lighter job, filtered on
packages/spec/**, that:pnpm install, no turbo build;pnpm check:console-injection --require-stampagainst it;The stamp PR #9706 writes into
dist/.objectstack-injection.jsonis content-replayed, so this needs no build tree and no network — which is what makes the light job possible at all.Open questions for whoever takes it
pnpm install? The check is a plain node script, but confirmpnpm check:console-injectionis reachable without a full workspace install — if it is not, invoke the script directly withnode, the waylint.ymlalready does for gates whose alias would otherwise need rootpackage.json.Console Pin Gateis not among the six required contexts — I read the live ruleset)? Price it before building.Refs: #9667 · PR #9706 · #8134 / PR #9660
Generated by Claude Code