Found while working #10016 (which fixes the other carrier of this claim, the GAP 1 header in scripts/sync-template-versions.mjs). Filed unassigned. Not folded into that PR: #10016's declared file surface is scripts/sync-template-versions.mjs, and its ruling is explicit that the workflow/gate-wiring surface belongs to the change that just landed there — so this is reported rather than edited.
.github/workflows/lint.yml, the comment above the Template version-time rewriter self-test step (currently lines ~536-556 on main), states:
Measured with picomatch 4.0.5 (the matcher dorny/paths-filter uses): a diff confined to
scripts/sync-template-versions.mjs yields core=false, so Test Core is skipped ENTIRELY on the PR
that changes the rewriter, and with it the vitest. […] the --union-into step that DOES pull
create-objectstack back in is a step inside the skipped job. The queue build catches it, one merge
late, as batch collateral
Two separate inaccuracies, measured on main (c1731d023) rather than inferred:
1. Test Core is skipped ENTIRELY is no longer true.core=false is still correct — that filter was not widened — but the test job now ORs in a second filter output. Evaluating the merged filter job's globs against a diff confined to scripts/sync-template-versions.mjs, using picomatch 2.3.1 with {dot: true} and the SOME quantifier exactly as dorny/paths-filter@v4's createRuleItem does:
docs => false
core => false
console => false
scripts => true (MATCH scripts/**)
so if: ${{ !cancelled() && (needs.filter.outputs.core != 'false' || needs.filter.outputs.scripts != 'false') }} resolves to RUN. The --union-into step is therefore no longer "inside the skipped job", and the queue build is no longer the first signal. Traced further, the vitest itself runs too: --union-into adds @objectstack/spec and create-objectstack, partition-test-shards.mjs places create-objectstack on a shard, and create-objectstack#test declares $TURBO_ROOT$/scripts/sync-template-versions.mjs in turbo.json so the task hash moves and no cached green is replayed (measured: pnpm turbo run test --filter=create-objectstack on such a diff reported Cached: 0 cached, 1 total and ran src/template-version-stamps.test.ts, 8 tests).
2. picomatch 4.0.5 (the matcher dorny/paths-filter uses) names the wrong version.dorny/paths-filter@v4's own package-lock.json resolves picomatch (a runtime, non-dev dependency, ncc-bundled into dist/index.js) to 2.3.1; 4.0.5 is what this repo has in its tree. The two happen to agree on these globs — I evaluated under both and got the same four verdicts — so nothing downstream is wrong today, but the parenthetical asserts the action's behaviour while quoting a version the action does not carry, which is exactly the sort of citation the next author would trust without re-measuring.
The rest of that comment is unaffected and worth keeping: lint.yml carries no paths filter and no filter job, so the step runs on every pull request, push and merge-queue build, and that is still the reason the flag lives there rather than as more cases in the vitest file. What changed is only which gap justifies it — the scheduling half is closed, the red-paths half (GAP 2) is not.
Same class as #9651 and #10016: a rationale comment that stopped being true and would have the next reader re-derive the wrong conclusion.
Refs: #10016 (the sibling carrier, fixed), #9829 / #10014 (what closed the scheduling half), #9348 (the card that added the flag), #10015 (the filter's other missing roots — a different question from this claim).
Generated by Claude Code
Found while working #10016 (which fixes the other carrier of this claim, the GAP 1 header in
scripts/sync-template-versions.mjs). Filed unassigned. Not folded into that PR: #10016's declared file surface isscripts/sync-template-versions.mjs, and its ruling is explicit that the workflow/gate-wiring surface belongs to the change that just landed there — so this is reported rather than edited..github/workflows/lint.yml, the comment above theTemplate version-time rewriter self-teststep (currently lines ~536-556 onmain), states:Two separate inaccuracies, measured on
main(c1731d023) rather than inferred:1.
Test Core is skipped ENTIRELYis no longer true.core=falseis still correct — that filter was not widened — but thetestjob now ORs in a second filter output. Evaluating the mergedfilterjob's globs against a diff confined toscripts/sync-template-versions.mjs, using picomatch 2.3.1 with{dot: true}and the SOME quantifier exactly asdorny/paths-filter@v4'screateRuleItemdoes:so
if: ${{ !cancelled() && (needs.filter.outputs.core != 'false' || needs.filter.outputs.scripts != 'false') }}resolves to RUN. The--union-intostep is therefore no longer "inside the skipped job", and the queue build is no longer the first signal. Traced further, the vitest itself runs too:--union-intoadds@objectstack/specandcreate-objectstack,partition-test-shards.mjsplacescreate-objectstackon a shard, andcreate-objectstack#testdeclares$TURBO_ROOT$/scripts/sync-template-versions.mjsinturbo.jsonso the task hash moves and no cached green is replayed (measured:pnpm turbo run test --filter=create-objectstackon such a diff reportedCached: 0 cached, 1 totaland ransrc/template-version-stamps.test.ts, 8 tests).2.
picomatch 4.0.5 (the matcher dorny/paths-filter uses)names the wrong version.dorny/paths-filter@v4's ownpackage-lock.jsonresolvespicomatch(a runtime, non-devdependency, ncc-bundled intodist/index.js) to 2.3.1; 4.0.5 is what this repo has in its tree. The two happen to agree on these globs — I evaluated under both and got the same four verdicts — so nothing downstream is wrong today, but the parenthetical asserts the action's behaviour while quoting a version the action does not carry, which is exactly the sort of citation the next author would trust without re-measuring.The rest of that comment is unaffected and worth keeping: lint.yml carries no paths filter and no filter job, so the step runs on every pull request, push and merge-queue build, and that is still the reason the flag lives there rather than as more cases in the vitest file. What changed is only which gap justifies it — the scheduling half is closed, the red-paths half (GAP 2) is not.
Same class as #9651 and #10016: a rationale comment that stopped being true and would have the next reader re-derive the wrong conclusion.
Refs: #10016 (the sibling carrier, fixed), #9829 / #10014 (what closed the scheduling half), #9348 (the card that added the flag), #10015 (the filter's other missing roots — a different question from this claim).
Generated by Claude Code