docs(ci): close the falsified paths-ignore sweep — three named sites plus five found (#4381) - #4382
Merged
Conversation
…plus five found (#4381) Third and final card in the #3857 -> #4369 -> #4381 chain. objectui#3523 step 2 deleted `paths-ignore` from `ci.yml`/`lint.yml`'s `pull_request` trigger; it survives only on `push`, and the PR-side path decision is the in-job `Decide whether this change needs a full run` step. PR #4371 corrected three texts and PR #4380 four more; this closes the sweep. The three sites the card named: - scripts/__tests__/check-changeset-presence.test.ts — the sentence PR #4371 rewrote in the docblock of the very script this file accompanies, so the pair no longer disagrees across two files with the same basename. - content/docs/guide/ci-cd-pipeline.md — the published-docs copy, restated on the reason that holds today and cross-referenced to the two places on the same page that already had it right. - .github/workflows/docs-links.yml — graded, then fixed. The consequence was already past tense but the lead-in carrying it was a bare present-tense assertion, and it is load-bearing for a pull_request conclusion. Five more the full-tree sweep found, corrected in the same dialect: - .github/workflows/control-bytes.yml and its companion scripts/__tests__/check-control-bytes.test.ts — the only fully present-tense pair left, with no historical marker at all. - scripts/__tests__/docs-links-workflow.test.ts — docs-links.yml's companion. - .github/workflows/ci.yml — the "docs link check is NOT here any more" note. - content/docs/guide/ci-cd-pipeline.md — the #3448 narrative at the docs-links section, whose correction paragraph already followed three paragraphs later. docs-links.yml is graded apart from the changeset gates on purpose: the in-job switch does NOT keep a link check out, because `ci.yml`'s `docs` job gates its steps on `content/`/`apps/site/` having CHANGED. What outlived that premise is the `push` lane, still filtered at the trigger, plus #3448's one-gate-one-home. Comment-only. Every changed line in .ts is a `//` or docblock line and in .yml a `#` line; the .md is prose. All three touched workflows re-parse to byte-identical objects, and with whole-line comments stripped they are byte-identical to origin/main.
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Collaborator
Author
|
ACCEPT — PM 复核 (session
Flipping ready + arming auto-merge. Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #4381
The closing sweep of the falsified
paths-ignorepremise, third and last in the #3857 → #4369 → #4381 chain. Per the PM ruling on the card, this is not another enumeration: it is the three named sites plus a full-tree sweep under multiple phrasings, so the pattern of each card leaving residue for the next one ends here.The corrected reality, mirrored verbatim from PR #4371 and PR #4380: objectui#3523 step 2 deleted
paths-ignorefromci.yml's andlint.yml'spull_requesttrigger; it survives only onpush. The pull-request path decision is now the in-jobDecide whether this change needs a full runstep, whose exclusion list is thatpushfilter unchanged, held identical to it byscripts/__tests__/merge-queue-reporting.test.ts. Measured counter-evidence to the retired sentence: PR #3856 (one markdown file) started 16 checks, PR #4339 (one line added to AGENTS.md) 17.Sites corrected
Part 1 — the three sites the card named
scripts/__tests__/check-changeset-presence.test.ts:215ci.ymlandlint.ymlskips, so nothing in either of them ever reads the changeset" + a "Not the reason this comment used to give" paragraph naming PR #4371, #3523 step 2 and the in-job stepcontent/docs/guide/ci-cd-pipeline.md:677ci.ymlandlint.ymlshort-circuits" + a parenthetical marking the old sentence and pointing at the two places on this same page that already stated it correctly (lines 47-48 and 601-602).github/workflows/docs-links.yml:5ci.ymllists … underpaths-ignore… so a docs-ONLY pull request … started no workflow at all"ci.ymlTHEN listed … under thepaths-ignoreof both its triggers" + "Read that paragraph as history, and do not act on its present tense" + the two reasons that outlived the premiseSite 1 is the one the card called out as the sharpest: it sat in the test file for the very script PR #4371 corrected, so
check-changeset-presence.mjsandcheck-changeset-presence.test.ts— same basename, one directory apart — asserted opposite shapes. They now agree.Part 2 — five more the full-tree sweep found
.github/workflows/control-bytes.yml:4'**/*.md',content/**,docs/**and.changeset/**underpaths-ignore, and GitHub has no per-job path filter"scripts/__tests__/check-control-bytes.test.ts:356paths-ignoremarkdown,content/**,docs/**and.changeset/**"scripts/__tests__/docs-links-workflow.test.ts:14ci.ymllists every markdown path … underpaths-ignore"ci.ymlTHEN listed … under thepaths-ignoreof both its triggers" + "That paragraph is history".github/workflows/ci.yml:645paths-ignore: it listscontent/**and'**/*.md'"content/docs/guide/ci-cd-pipeline.md:460ci.ymllists'**/*.md',content/**,docs/**andapps/site/**underpaths-ignore"ci.ymlthen listed … under thepaths-ignoreof both its triggers"Items 4 and 5 were the only fully present-tense pair left in the repository — no historical marker anywhere in either, unlike the mixed-tense sites the card had already graded. Items 5, 6 and 7 are the companion texts of files fixed in this same PR; correcting a header while leaving its accompanying test docblock asserting the old shape would have rebuilt the exact two-shapes problem this card exists to close.
The
docs-links.ymlgrading (item 3) — fixed, and graded apart from the changeset gatesThe card asked for this one to be graded before being fixed, with leave-with-reasoning an acceptable outcome. It failed grading, on two counts:
ci.ymllists'**/*.md',content/**,docs/**andapps/site/**underpaths-ignore" — with nopushqualifier, in a header whose whole job is to answer a question about today ("why is this its own workflow").I did not use the card's suggested model wording verbatim.
scripts/__tests__/check-skills-paths.test.ts:402-403("lists … under thepaths-ignoreof itspushtrigger") is the right model for a push consequence, which is what that file is reasoning about. Here the consequence is a pull request, so qualifying the lead-in topushwould leave a conclusion that no longer follows from its premise. The history is therefore marked as history ("THEN listed … under thepaths-ignoreof both its triggers"), which is what actually made the consequence true, and today's shape is stated separately.One substantive finding while grading, which changes what this header may claim. The other corrected texts in this chain all conclude "the conclusion outlived its premise, because the in-job switch skips every expensive step on such a PR". That reasoning is false for docs and I did not copy it:
ci.yml'sdocsjob gates its steps onapps/site/orcontent/having CHANGED (ci.yml:613-616) — the inverse direction from thetype-check/test/e2egates — so a docs-only PR satisfies it and a link check living there today would run. What genuinely outlived the premise is different and is now what the header says:ci.ymlstill filters itspushlane, so a docs-only push tomainstarts it not at all, anddocs-links.ymlis the only thing that link-checks that merge; andBoth are exactly what
content/docs/guide/ci-cd-pipeline.md:474-477already said correctly; the workflow header was the copy that lacked it.Sweep
Run against the whole tree over
*.ts *.tsx *.mjs *.md *.yml *.yaml, excludingnode_modulesanddist, under two rounds of phrasings — the card's minimum set plusstart neither/started neither/starts neither/no per-job path filter/never started/would never start/does not start.Falsified-consequence phrasings, after this PR:
Ten hits remain and every one was read. All ten are either a quoted correction (the phrase appears inside quotes in a sentence that then refutes it —
changeset-guard.yml:10,changeset-presence.yml:23,check-changeset-presence.mjs:38,check-changeset-presence.test.ts:224,ci-cd-pipeline.md:681,control-bytes.yml:15), marked history (docs-links.yml:8under "Read that paragraph as history";check-changeset-no-major.test.ts:23under "That last sentence is history";merge-queue-reporting.test.ts:25, the #3523 problem statement), or true as written (skills-paths.yml:7— "a push that only edits a guide would therefore start neither", accurate, since thepushfilter survives).Present-tense lead-in class, after this PR: every remaining "lists … under
paths-ignore" site carries apushqualifier or a history marker —skills-paths.yml:5-6,check-skills-paths.test.ts:403-404,ci-cd-pipeline.md:47-48,ci-cd-pipeline.md:143,ci-cd-pipeline.md:212,ci-cd-pipeline.md:261,ci-cd-pipeline.md:176,ci.yml:115-117,lint.yml:100-108,merge-queue-reporting.test.ts:252,lint-workflow.test.ts:320— plus the corrections from PR #4371 / PR #4380, which were re-read against their merged versions rather than assumed.Acceptance: zero remaining present-tense copies of the falsified premise outside the exceptions listed below — that is, no site now asserts, in the present tense, that a markdown-only or changeset-only pull request starts no workflow, or that
ci.yml/lint.ymlfilter pull requests by path.Exceptions — report, don't fix
scripts/__tests__/check-i18n-en-drift.test.ts:739scripts/__tests__/check-action-forward-parity.test.ts:712content/docs/releases/**63c75d0fdversion rather than the pre-merge text before concluding they were fine.CHANGELOG.mdfilespaths-ignore-adjacent hit, left.Grading for the twin pair, since leaving them is a judgement and not an oversight. Both read: "ci.yml
paths-ignores markdown, content/, docs/, apps/site/ and .changeset/. None can matchpackages/…, so a PR that edits … always starts this workflow." Two reasons to leave them:pushlist, which is precisely what the assertion under each comment parses (ci.slice(0, ci.indexOf('jobs:'))reads theon:block, whose only quoted entries today are thepushpaths-ignore). A reader who acts on either gets the right answer, so neither is in the "decide by it, decide wrong" class the three cards in this chain were filed against.Verification
Comment/prose-only, so no assertion changes and no reverse verification in the usual before-green/after-red sense is available — by construction nothing reads these lines. Stating that plainly rather than manufacturing a red: the meaningful proof for this change is mechanical, and it is stronger than a test result.
.tsis a///docblock line and in.ymla#line. Strip the leading+/-from the.ts/.mjs/.ymlhunks, drop comment and blank lines, and zero lines remain:yaml@2.9.0,JSON.stringifyof the parsed document vsgit show origin/main:):ci.yml12448 → 12448,control-bytes.yml694 → 694,docs-links.yml668 → 668.ALL PARSED OBJECTS IDENTICAL.origin/main— the strongest form of the same claim, and it directly answers the card's "verify that stays true" aboutwithoutComments. Also re-checked the two assertions that read a workflow raw, without stripping (check-control-bytes.test.ts):control-bytes.ymlstill matches neither/paths-ignore:/nor/^\s+paths:/m, so the new prose cannot trip them; andci.ymlwith comments stripped still does not mentionscripts/check-doc-links.mjs, keeping the one-gate-one-home assertion honest.--maxWorkers=1,NODE_OPTIONS=--max-old-space-size=2048. Targeted first (check-changeset-presence,ci-cd-pipeline-doc,docs-links-workflow,check-skills-paths,check-control-bytes,merge-queue-reporting,check-changeset-no-major,lint-workflow): 8 passed (8), 168 passed (168). Then the whole directory, which covers every remaining reader of the touched files: 38 passed (38), 851 passed (851) — re-run against the committed tree after the commit, same result.check-doc-links.mjs→ "Links are valid across 13 scan roots" (run because this PR edits a docs page);check-control-bytes.mjs→ OK, 4086 tracked text files;check-skills-paths.mjs→ OK;check-changeset-no-major.mjs→ OK;check-changeset-presence.mjs→ "7 file(s) changed, 0 of them under the src/ of a package the release covers … no changeset is owed".eslinton the changed.tsfiles: exit 0.grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over the changed files returns no hits.Resource note, declared: the shared
/tmp/os-heavy-verify.lockhad five holders queued, and these are node-only script suites with no build and no DOM. Measured 13.2 GB available before starting and ran them outside the lock.No changeset: comment/docs-only, nothing under a released package's
src/, and the gate itself confirms none is owed. Noskip-changesetlabel applied, per dispatch.Generated by Claude Code