Out-of-scope finding, recorded while implementing #4369 (PR #4380). Filed unassigned, per report-don't-fix: #4369 enumerates exactly four sites and its dispatch scope is those four, so these were left untouched rather than swept in. content/docs/** was additionally an explicit no-touch zone for that dispatch.
Fact
objectui#3523 step 2 deleted paths-ignore from ci.yml/lint.yml's pull_request trigger; it survives only on push (ci.yml line 6, lint.yml line 32). #3857 / PR #4371 corrected three texts that still asserted the old shape; #4369 / PR #4380 corrects four more. A sweep run against origin/main @ 85a3082e6 while implementing #4369 finds the premise still asserted in the present tense at two further places that neither card enumerates, plus one mixed-tense case:
| Location |
What it still says |
Grade |
scripts/__tests__/check-changeset-presence.test.ts:215-217 |
"changeset-guard.yml's paths: ['.changeset/**'] is deliberate: a PR adding ONLY a changeset starts no other workflow, and that guard exists to see it." |
Present tense, falsified. Exactly the sentence PR #4371 rewrote in the .mjs docblock this test file accompanies — the pair now disagrees with each other across two files with the same basename |
content/docs/guide/ci-cd-pipeline.md:677-678 |
"that workflow's trigger is paths: ['.changeset/**'], and the inversion is deliberate — a PR adding only a changeset starts no other workflow, and that guard exists to see it." |
Present tense, falsified. The published docs page, i.e. the widest-audience copy of the seven-plus |
.github/workflows/docs-links.yml:5-8 |
"ci.yml lists '**/\*.md', content/**, docs/** and apps/site/** under paths-ignore, and GitHub has no per-job path filter … so a docs-ONLY pull request matched every ignore pattern, started no workflow at all" |
Judgement call. The consequence is past tense and historically accurate; the lead-in that carries it is present tense and is now true only of the push trigger. Weaker than the two above — grade it before fixing it |
The docs-links.yml case is the same shape scripts/__tests__/check-skills-paths.test.ts:402-403 already writes correctly, and that line is a ready-made model for the fix: "ci.yml lists '**/\*.md' under the paths-ignore of its push trigger".
Why it is worth a card rather than a shrug
Same class #3857's triage graded and #4369 inherited: agent-facing operational assertions that are live-disproven, the "decide by it, decide wrong" class, cost already sampled (PR #3856's author wrote a false CI expectation and got 16 checks).
The both-shapes cost #4369 named is what actually applies here, and it gets sharper rather than softer each time a sweep lands: after PR #4380 the repository holds seven corrected texts and two-to-three stale ones, and one of the stale ones sits in the test file for the very script PR #4371 corrected. A reader who lands on check-changeset-presence.test.ts first has no signal that the docblock one file away supersedes it.
Not a broken gate
All three are comments/prose. No assertion depends on them: check-changeset-presence.test.ts strips whole-line comments before every scan (withoutComments), and ci-cd-pipeline-doc.test.ts pins structural YAML properties, not header prose. The fix is comment-only in all three, with the same mechanical zero-behavior proof PR #4380 used.
How to re-check
grep -rn 'starts no other workflow' --include='*.ts' --include='*.md' --include='*.yml' . | grep -v node_modules
sed -n '1,20p' .github/workflows/ci.yml # paths-ignore on push only; the comment below it says why
sed -n '29,42p' .github/workflows/lint.yml # same
Dedupe
Searched open + closed issues for paths-ignore, changeset-presence, changeset-guard, ci-cd-pipeline: hits are #3857 (closed, PR #4371 — three sites, disjoint), #4369 (open, PR #4380 — four sites, disjoint), #4170 (closed, a different unpinned claim in the same doc section). No twin.
Relation
Generated by Claude Code
Out-of-scope finding, recorded while implementing #4369 (PR #4380). Filed unassigned, per report-don't-fix: #4369 enumerates exactly four sites and its dispatch scope is those four, so these were left untouched rather than swept in.
content/docs/**was additionally an explicit no-touch zone for that dispatch.Fact
objectui#3523 step 2 deleted
paths-ignorefromci.yml/lint.yml'spull_requesttrigger; it survives only onpush(ci.ymlline 6,lint.ymlline 32). #3857 / PR #4371 corrected three texts that still asserted the old shape; #4369 / PR #4380 corrects four more. A sweep run againstorigin/main@85a3082e6while implementing #4369 finds the premise still asserted in the present tense at two further places that neither card enumerates, plus one mixed-tense case:scripts/__tests__/check-changeset-presence.test.ts:215-217changeset-guard.yml'spaths: ['.changeset/**']is deliberate: a PR adding ONLY a changeset starts no other workflow, and that guard exists to see it."content/docs/guide/ci-cd-pipeline.md:677-678paths: ['.changeset/**'], and the inversion is deliberate — a PR adding only a changeset starts no other workflow, and that guard exists to see it.".github/workflows/docs-links.yml:5-8ci.ymllists'**/\*.md',content/**,docs/**andapps/site/**underpaths-ignore, and GitHub has no per-job path filter … so a docs-ONLY pull request matched every ignore pattern, started no workflow at all"pushtrigger. Weaker than the two above — grade it before fixing itThe
docs-links.ymlcase is the same shapescripts/__tests__/check-skills-paths.test.ts:402-403already writes correctly, and that line is a ready-made model for the fix: "ci.ymllists'**/\*.md'under thepaths-ignoreof itspushtrigger".Why it is worth a card rather than a shrug
Same class #3857's triage graded and #4369 inherited: agent-facing operational assertions that are live-disproven, the "decide by it, decide wrong" class, cost already sampled (PR #3856's author wrote a false CI expectation and got 16 checks).
The both-shapes cost #4369 named is what actually applies here, and it gets sharper rather than softer each time a sweep lands: after PR #4380 the repository holds seven corrected texts and two-to-three stale ones, and one of the stale ones sits in the test file for the very script PR #4371 corrected. A reader who lands on
check-changeset-presence.test.tsfirst has no signal that the docblock one file away supersedes it.Not a broken gate
All three are comments/prose. No assertion depends on them:
check-changeset-presence.test.tsstrips whole-line comments before every scan (withoutComments), andci-cd-pipeline-doc.test.tspins structural YAML properties, not header prose. The fix is comment-only in all three, with the same mechanical zero-behavior proof PR #4380 used.How to re-check
Dedupe
Searched open + closed issues for
paths-ignore,changeset-presence,changeset-guard,ci-cd-pipeline: hits are #3857 (closed, PR #4371 — three sites, disjoint), #4369 (open, PR #4380 — four sites, disjoint), #4170 (closed, a different unpinned claim in the same doc section). No twin.Relation
paths-ignorepremise survive #3857's three named sites (changeset-presence.yml, check-changeset-no-major.mjs and its test) #4369 / PR docs(ci): correct the four remaining copies of the falsified paths-ignore premise #4380 — next four sites; this finding was produced by that dispatch's sweep.Generated by Claude Code