Skip to content

lint.yml's "Template version-time rewriter self-test" comment carries the same retired scheduling claim, plus a wrong picomatch version #10045

Description

@os-steve

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions