docs(skills): the absence pin a deleting PR writes is tree-scoped - #15088
Merged
Conversation
The retirement playbook's deleting-PR checklist tells an author to write a negative pin, and said nothing about its SCOPE. A file-scoped one can only look where its author thought to look, and the whole failure mode is references the author did not know about — measured on a real removal: five surviving references across three packages, two triage cards, and two of the five written AFTER the deletion by a later PR, which only a pin that runs on every PR can catch. Four lines, inside the existing ratchet headroom (337 lines, ceiling 337). ⛔ No ceiling was raised and nothing was re-wrapped to buy room. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
This was referenced Sep 3, 2026
os-zhuang
approved these changes
Sep 4, 2026
os-zhuang
marked this pull request as ready for review
September 4, 2026 04:46
os-zhuang
enabled auto-merge
September 4, 2026 04:46
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.
Part of #14878 — this is the governed half of that card's ruling D, travelling separately from the code by the ruling's own permission.
⛔ Draft on purpose, and it stays draft.
.claude/skills/**is a governed surface: the maintainer merges it by hand, it is never armed, and it is never flipped ready by a seat. The code half — the two tree-scoped pins, the two live stale mentions, the reworded history line — is PR #15085. Bundling one sentence with it would have dragged the whole change onto the human-merge path.What the ruling asked for, verbatim
What is here
Four lines added to the Pin 测试 item of the deleting-PR checklist in
.claude/skills/spec-property-retirement/SKILL.md, in the file's own language and voice. They say: the absence pin is tree-scoped and never file-scoped; a file-scoped one only sees the file its author thought of, and the references that rot are the ones the author did not know about (measured — five surviving references across three packages, two cards, two of them written after the deletion by a later PR); exclude**/CHANGELOG.md,.changeset/and the pin itself with the reason written beside it, ⛔ never an allowlist file; and ⛔ an assertion of absence is not a stale mention — "repairing" it deletes the guard.That last clause is the one this card exists for. The pin the playbook is teaching contains
expect(plugin!.text).not.toContain(...), and a naive fixer clearing a stale-mention report would delete exactly that line.Ratchet — paid, not raised
333 → 337, inside the headroom that already existed. ⛔ No ceiling raised (that needs a maintainer ruling), ⛔ nothing re-wrapped to buy room — the first draft was six lines and was rewritten shorter rather than paid for out of neighbouring text.
This file is
.claude/skills/**(internal agent tooling), not the publishedskills/surface, so the published-skill net-growth budget does not apply to it; the line ratchet above is what governs it and it is green.Verification, at
025072000Gate family from
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack— 18 commands, exit codes captured before any pipe. 16 green, includingcheck:pm-skill-ratchet,check:pm-governed-merges,check:skill-frame-sync,check:doc-authoring,check:agent-test-spelling,check:nul-bytes,check:required-contextsand both cross-package-inputs limbs.Two came back exit 3 = NOT MEASURED (never a pass, never a red):
check-test-completeness(wants a savedturbo run testlog) andcheck:doc-formula-expressions(PREREQUISITE NOT MET in an unbuilt worktree).@objectstack/specdeclares this exact file as a cross-package test input, so its reader was run rather than assumed:🤖 Generated with Claude Code
Generated by Claude Code
Generated by Claude Code