Skip to content

docs(ci): drop ci-cd-pipeline.md's hand-copied object-ui ratchet list and put the page under the guard (#3782) - #4153

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3782-cicd-doc-fourth-copy
Aug 10, 2026
Merged

docs(ci): drop ci-cd-pipeline.md's hand-copied object-ui ratchet list and put the page under the guard (#3782)#4153
yinlianghui merged 1 commit into
mainfrom
claude/issue-3782-cicd-doc-fourth-copy

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes#3782

Option A, per the delegated ruling on the card: the parenthetical enumeration in content/docs/guide/ci-cd-pipeline.md is gone, the sentence converges on the evergreen phrasing the other two surfaces have used since #3261 / #3279, and the page joins the guard's surface list so all three copies sit under one gate.

A — drop the parenthetical enumeration, converge this page on the evergreen phrasing the other two surfaces already use, and add the page to the guard's surface list so all three copies sit under one gate. […] The reader's "where do these come from" pointer survives as a link to the config file, not a copy of its contents.

What changed

The page. The sentence keeps its main clause verbatim — "the rules eslint.config.js sets to error" — and loses the parenthesis that hand-copied the sources and named a rule outright. The provenance pointer survives as a link to eslint.config.js, where each of the four ratchets carries its ADR or issue in the comment beside the rule (verified on main: ADR-0054 Phase 5, objectui#2879, objectui#3090, and the objectql.ts type-discipline ratchet). check-doc-links resolves this repo's own blob/main/ URLs against the tree since #3507 / #3536, so that pointer is itself gated.

The guard.scripts/__tests__/lint-workflow.test.ts gains the page as a third surface. #3279 had already parameterised the two assertions over a surface list, so this was meant to be one entry. It was not.

The two matcher gaps this exposed

Adding the surface with the matcher exactly as #3279 left it, against the un-fixed page:

assertionverdict on the enumerating pagewhy
never enumerates them by namepassedit matched only the config's object-ui/-qualified key; prose names a rule bare, and the page said no-dynamic-import-in-test-hook
never hand-countsfailedit matched the quantifier in "every one of those error ratchets was inert" — a phrase that asserts no cardinality and cannot drift

The first is the load-bearing one. Added under that matcher, the entry would have been a green surface sitting over a live enumeration — a gate that reads exactly as covered as one that works, which is this issue's own defect one level up. Both gaps are closed: the name check matches both spellings, and three lookbehinds drop the quantifier reading of one. The narrowing is deliberate and small — "every one of the four ratchets" still fails, on four.

Reverse verification

In the order the card asked for, each step measured:

  1. surface added, matcher untouched, prose still enumerating — naming assertion green (the phantom gate above), count assertion red on "one of those \error` ratchet"`;
  2. matcher fixed, prose still enumerating — naming assertion red, naming object-ui/no-dynamic-import-in-test-hook; count assertion green;
  3. prose fixed — both green.

Tests

npx vitest run scripts/__tests__/ -> 28 files, 559 tests passed
node scripts/check-doc-links.mjs -> Links are valid across 7 scan roots.
node scripts/check-control-bytes.mjs -> OK (3840 tracked text files)
pnpm type-check:scripts -> clean
npx eslint scripts/__tests__/lint-workflow.test.ts -> clean

No changeset: scripts/check-changeset-presence.mjs arbitrates — "No source of a released package changed in this range, so no changeset is owed." Docs + test only, hence skip-changeset.

Out of scope

The card asked for a sweep of the same page for other hand-copied enumerations of the same shape. Two were found, both already drifted, both a different fact from the ratchet list and neither fixable without its own wording decision — so they are filed rather than bundled, which is the discipline that produced this card in the first place (#3782 was itself kept out of #3279's PR). See the linked finding.


Generated by Claude Code

…d gate the page (#3782)
`content/docs/guide/ci-cd-pipeline.md` argued from the `object-ui/*` error
ratchets a fourth time. Its main clause was already the evergreen phrasing, but
it closed on a parenthesised source list that named a rule outright — the same
hand-copy #3261 removed from `lint.yml` and #3279 from `check-lint-coverage.mjs`.
Option A per the ruling on #3782: the list goes, the reader's provenance pointer
survives as a link to `eslint.config.js`, and the page joins the guard's surface
list.
Adding the surface exposed two matcher gaps that made the entry worthless as
written:
- the rule-name check matched only the config's `object-ui/`-qualified key,
while prose names a rule bare — the page said
`no-dynamic-import-in-test-hook`, so the guard passed on the very enumeration
it was added for;
- the count check read the quantifier in "every one of those `error` ratchets"
as a cardinality.
Both are closed, so the surface entry gates something.
@vercel

vercelBot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredAug 10, 2026 2:16pm

Request Review

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci-cd-pipeline.md 里 object-ui ratchet 的括号列举是同一事实的第四份手抄清单(目前恰好完整,但无门禁)

2 participants

@yinlianghui@litant-dev-proton