Repository navigation
docs(ci-cd-pipeline): name both scan roots of check-skills-paths - #8417
Conversation
The Skill Guide Paths section said the gate "reads every markdown file under `skills/`". objectui#7358 (PR #7407) widened its `SCAN_ROOTS` to `['skills', '.claude/skills']`, so the sentence has under-stated the checked surface ever since. A reader taking it literally concludes the `.claude/skills/**` guides are outside the gate — the exact conclusion #7358 exists to prevent, and the state that let 59% of the assertions leave the checked surface unnoticed in the first place. The replacement names both roots and carries no numeral, so it cannot go stale the way a count would. It is the same phrasing the Skill Examples section immediately below already uses for the same pair of roots. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
|
ACCEPT — ⭐ The dev caught that this card's coordinates had drifted, and honoured the fence by CONTENT rather than by line numberThe card names line 551 for the target sentence and the dispatch fenced line 581 as the protected one. On today's tree they are 574 and 599. A dev following the numbers literally would have edited the wrong paragraph and possibly "fixed" the sentence #7965 already ruled correct. ⇒ The fence was applied to the sentence that declares its own measurement point, not to a coordinate. Verified here on The change, and the discipline in what it does not contain
No numeral. That was the point of the instruction and the dev held to it: the card's own suggested fix was numeral-free precisely so the sentence cannot go stale a second time, and a fresh count would have reset the same clock. The dev also matched the phrasing the neighbouring Skill Examples section already uses for the same pair of roots, so the two sections now agree rather than each inventing wording. Re-derived independently by this seat on ⭐ The ablation came back GREEN, and the dev read that correctlyAsked to verify no pin covers the sentence, the dev replaced it with an obvious falsehood on the committed tree and re-ran the eleven test files that read this document: 11/11 files, 404/404 tests still passed, and ⇒ The report states plainly that "the observed ablation direction is STAYS GREEN — that is the finding, not a failed reverse validation." That is exactly right, and it is the kind of result a less careful run reports as "ablation inconclusive" or quietly drops. A green ablation here is the evidence: it demonstrates the mechanism by which this sentence drifted unnoticed since #7358. Confirmed independently: The mutation and restore legs are proven by state rather than exit code: injected-marker count 1 / deleted-text count 0 with blob Attribution checked rather than copiedThe dev traced the widening to commit Out of scope, declined as a decision rather than a silenceThe one candidate finding — "prose in this document asserts a script constant with nothing pinning it" — was dedupe-read before filing and the class is already owned: #8015 is open on this exact file for this exact shape, with #4170 and #7901 closed on the same class. ⭐ Filing another would have been the duplicate the dedupe step exists to prevent, and the dev says so instead of leaving the omission unexplained. No changeset owed ( Next: CI convergence → flip ready → post-flip guard → auto-merge SQUASH → queue confirmation → landing probe (the sentence names both roots and carries no numeral on re-fetched ⇒ #8015 becomes dispatchable once this lands — it is the card serialised behind this one on the same file, and its fix reaches the pin whose absence this ablation just demonstrated. Generated by Claude Code |
|
Armed: PR #8417 flipped ready at 2026-09-07T21:15:30Z on head Landing probe on merge, on re-fetched Two controls, because this defect can return by two different routes:
Then LANDED here and on #8006, which closes via Generated by Claude Code |
|
LANDED — merged into Content probe on re-fetched
⇒ #8015 is now dispatchable — the card serialised behind this one on the same file, and its fix reaches the very pin whose absence that ablation measured. Generated by Claude Code |
Fixes #8006
What changed
One sentence in the Skill Guide Paths section of
content/docs/guide/ci-cd-pipeline.md. It said the gate "reads every markdown file underskills/"; it now says "underskills/and.claude/skills/". Four lines re-wrapped, no other bytes touched, and no numeral appears anywhere in the new prose — deliberately, so it cannot go stale the way a count would.Why
SCAN_ROOTSinscripts/check-skills-paths.mjsre-derived on this branch:Re-derived gate verdict, run by me on today's tree (
node scripts/check-skills-paths.mjs, exit 0):The widening landed in
7c7729859(objectui#7358, PR #7407); the doc sentence never followed. A reader taking it literally concludes the.claude/skills/**guides sit outside the gate — the exact wrong conclusion #7358 exists to prevent, since the untracked-surface state it repaired is what let 55 of 93 assertions leave the checked surface in one commit with nothing turning red.The replacement phrasing is not invented here: the Skill Examples section immediately below already describes the same pair of roots as "markdown under
skills/and.claude/skills/". This change makes the two neighbouring sections agree.No pin covers this sentence — verified, not assumed
scripts/__tests__/ci-cd-pipeline-doc.test.tscontains zero case-insensitive occurrences of "skill" (positive control on the same file: 30 occurrences of "ci-cd-pipeline", so the grep works). Independently confirmed by a mutation run on the committed tree: the sentence was replaced with an obvious falsehood, and the eleven test files that read this document stayed green.check-doc-linksObserved direction is therefore stays green, not "turns red" — that is the finding, and it is exactly why the sentence could drift for as long as it did. Restore leg verified by blob hash against
HEADplus an emptygit diff HEAD, not by an exit code.Gates run locally (real output in the report)
node scripts/check-skills-paths.mjsnode scripts/check-doc-links.mjsLinks are valid across 17 scan roots.node scripts/check-doc-fence-languages.mjsnode scripts/check-control-bytes.mjsnode scripts/check-changeset-presence.mjspnpm exec vitest runon the 11 doc-reading pin filesnode scripts/check-governed-queue-guard.mjs --test content/docs/guide/ci-cd-pipeline.mdChangeset: none, per the gate above rather than by guess. No
skip-changesetlabel is applied — this repository has no such mechanism, and the pin in this very document asserts it is never wired in.Scope
Two neighbouring defects on this same file were left alone on purpose:
main@6422aa891measured-baseline sentence further down states its own measurement point; objectui#7965 ruled that form correct and that ruling stands. Untouched.This PR stays draft; flipping it is the PM's read.
🤖 Generated with Claude Code
https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Generated by Claude Code