Observation-class finding, filed unassigned from #8271's implementation (PR #8330). Not a defect and nothing is broken by it — recording it so it is not rediscovered.
Blocked-by: #8330 — this is only true once that PR merges.
What
.github/workflows/lint.yml carries a "Build the ledgered packages' dependencies" step immediately before the step that runs pnpm check:type-check-debt:
- name: Build the ledgered packages' dependencies
run: pnpm exec turbo run build --filter='./packages/*' --filter='./packages/*/*'
- name: Re-measure the type-check DEBT / TEST_DEBT ledger
run: pnpm check:type-check-debt
PR #8330 moves that build into the gate — refreshBuiltClosure() in scripts/check-type-check-coverage.mjs runs the same command with the same filters, because the local path had no equivalent and a stale dist/ there produced drift that was not in the source. Once it lands, the workflow step becomes a duplicate of work the gate now does itself.
Cost of leaving it
Measured: a closure build with everything already current is 9.5 s (70/70 turbo cache hits). So the duplicate is cache hits, not a rebuild — the reason this is filed as an observation rather than queued.
Why it might still be worth doing
The argument for removing it is not the 9.5 s, it is that a precondition owned in two places drifts: if the gate's filters and the workflow step's filters ever diverge, CI measures a different world than a local run, which is the exact class of defect #8271 was.
The argument against is that any lint.yml edit pulls in the workflow gate family (check:required-contexts, check:workflow-status-functions, check:node-version, check:shard-attestation, check:filter-alias-parity, check:changeset-gate-self-tests, check-changeset-no-major) for a change worth seconds — and that keeping the build visible in the workflow is documentation for a reader of lint.yml, who otherwise cannot see that the step happens at all.
Whoever picks this up should decide between removal and leaving a comment in lint.yml pointing at refreshBuiltClosure(); the second may well be the better trade.
Observation-class finding, filed unassigned from #8271's implementation (PR #8330). Not a defect and nothing is broken by it — recording it so it is not rediscovered.
Blocked-by: #8330 — this is only true once that PR merges.
What
.github/workflows/lint.ymlcarries a "Build the ledgered packages' dependencies" step immediately before the step that runspnpm check:type-check-debt:PR #8330 moves that build into the gate —
refreshBuiltClosure()inscripts/check-type-check-coverage.mjsruns the same command with the same filters, because the local path had no equivalent and a staledist/there produced drift that was not in the source. Once it lands, the workflow step becomes a duplicate of work the gate now does itself.Cost of leaving it
Measured: a closure build with everything already current is 9.5 s (70/70 turbo cache hits). So the duplicate is cache hits, not a rebuild — the reason this is filed as an observation rather than queued.
Why it might still be worth doing
The argument for removing it is not the 9.5 s, it is that a precondition owned in two places drifts: if the gate's filters and the workflow step's filters ever diverge, CI measures a different world than a local run, which is the exact class of defect #8271 was.
The argument against is that any
lint.ymledit pulls in the workflow gate family (check:required-contexts,check:workflow-status-functions,check:node-version,check:shard-attestation,check:filter-alias-parity,check:changeset-gate-self-tests,check-changeset-no-major) for a change worth seconds — and that keeping the build visible in the workflow is documentation for a reader oflint.yml, who otherwise cannot see that the step happens at all.Whoever picks this up should decide between removal and leaving a comment in
lint.ymlpointing atrefreshBuiltClosure(); the second may well be the better trade.