fix(skills): teach the house migrate-sentence in spec-property-retirement and widen the pin's population by that one file - #11092
Conversation
…ment and widen the pin's population by that one file (#10848) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
…ced gate tolls (#10848) - single-line the resolve() so the cross-package scanner can name the read - ci.yml crosspkg parity entry for the declared glob (check:ci-filter-parity) - skill-line ratchet ceiling 328 -> 334, maintainer-ruled 2026-08-22 Option A Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. |
|
CI note (say-once): Generated by Claude Code |
…0848 measurement (10 -> 11, new member pinned by name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e
|
re-ACCEPT 确认(补丁轮收口):补丁头 Generated by Claude Code |
…in bump Encode the C half of the maintainer's 2026-08-22 A+C ruling as Post-Task Checklist item 4: a removal or rename the pinned objectui checkout still imports must land together with the objectui-side fix and the .objectui-sha bump (sdui:manifest second half included), because the Console Pin Gate builds the pinned sibling against current main — merging the removal alone turns main red for every PR in the repo. The ruling that authorizes the removal implicitly authorizes the sibling fix + pin bump in the same landing. Line ratchet payment (AGENTS.md ceilinged at 961, zero headroom): the one added line is paid by deleting the seventeen-phantom-pins incident parenthetical in the Build & Test section — incident case law lives in git history per the ratchet header's own guidance. The optional one-line pre-merge check in the spec-property-retirement SKILL.md checklist is deferred: PR #11092 is in flight touching that file with auto-merge armed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MsbKEG4LtERSLaDrbehM3e Fixes #10986
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32586914191 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Fixes #10848
Implements the maintainer's ruling of 2026-08-22 (Option A, recorded verbatim on the card): replace convention 5 of the retirement skill with the house sentence the pin test requires, drop the unreachable "only when a conversion rewrites sources" condition, carry the pin docblock's one allowed variant shape into the skill, and extend the pin test's population by exactly this one file — deliberately not the whole
.claudetree.Governed surface notice: this PR touches
.claude/skills/— draft, human-merge only (Prime Directive 14). It is never to be queued, armed, or flipped ready by any AI seat.The two ruled files
.claude/skills/spec-property-retirement/SKILL.md— convention 5 now teaches the house sentence ("Run the migrate-meta command to list the mechanical edits for existing sources; apply them by hand", with the skill's usual N-minus-1 placeholder as the from-operand) plus the partial-conversion two-clause variant, and states why: the command replays the chain and prints the change list, and writes no source file until the in-place codemod (feat(cli):os migrate meta --write— the AST codemod that rewrites authored sources for the mechanicalappliedset (v18) #9591, which remains open and is not addressed here) lands. The still-true tail of the old convention (the message never names the conversion id) is kept. File readings: 328 lines before, 334 after — net +6, inside the card's budget of about six.packages/spec/src/shared/retired-key-migrate-sentence.test.ts— a new judged block covering the skill file. It cannot ride the existing corpus walk, for three mechanical reasons stated in the code: the walk yields only TypeScript files; the marker and house anchors require a numeric from-operand and a closing string-literal quote, while the skill spells a placeholder and ends sentences at a code-span close; and the reconstruction step drops any line opening with an asterisk, which in markdown is bold text, not a comment. So the skill is judged raw and whitespace-normalised with placeholder-aware anchors; the withdrawn-claim direction reuses the existingWITHDRAWN_CLAIMregex verbatim. Three tests: every taught prescription is house-form or MIXED; anti-vacuity (both shapes present, at least two judged sites); and the withdrawn claim is absent in every spelling.Both directions verified (reverse verification from the committed state)
Standing main's copy of the skill file up against the widened pin (tree-only restore, fix already committed): exactly the 3 new tests go red, all 9 pre-existing tests stay green. Observed direction: red, as predicted. Failure excerpt names the exact defect:
(spelling of the placeholder adjusted here for the body sanitizer; the log carries the angle-bracket original). Restored from the committed branch afterwards; working tree clean.
Fabricated-match measurement (triage-flagged risk)
Census of the fixed skill file: 4 total mentions of the migrate-meta command; exactly 2 are judged — the two taught templates in convention 5; the 2 unjudged mentions are descriptive prose (the section-3
retiredFromLoadPathbullet naming the command with an "old" placeholder, and one bare naming of the tool), correctly outside the marker because they carry no "Run ..." prescription shape; 0 withdrawn-claim hits anywhere in the file. No false positives on unrelated content.Gate-forced extra files (4, each named by a red gate's own remedy text)
scripts/check-cross-package-test-inputs.mjs+turbo.json— the new read escapespackages/spec, socheck:cross-package-test-inputsrequires the declared glob and the matching turbo$TURBO_ROOT$input (one file, not a subtree)..github/workflows/ci.yml—check:ci-filter-parityrequires the declared glob verbatim in thecrosspkgscheduling filter so a skill-only diff still starts spec's suite.scripts/pm/check-skill-line-ratchet.mjs— ceiling 328 to 334. The ratchet's own failure text says a raise requires a maintainer ruling quoted in the PR; the ruling is the card's, 2026-08-22, recorded by the skills seat: 「the maintainer ruled: 同意 (Option A)」 — Option A being "replace convention 5 ... with the house sentence the pin test requires ... and carry the pin docblock's one allowed variant form into the skill so authors have both shapes", which is precisely the +6 lines.Verification (union at head 61adbc2)
pnpm --filter @objectstack/spec test— "Test Files 415 passed (415) · Tests 11065 passed (11065)" (includes the widened pin: 12/12 in the pin file).pnpm --filter @objectstack/spec typecheck— "check:test-typecheck: OK — @objectstack/spec's test layer compiles under packages/spec/tsconfig.test.json".pnpm check:type-check-debt— "check-type-check-coverage --re-measure: OK — 33 ledger entr(ies) re-measured in 232.1s, 1908 raw tsc error(s) total, none above its recorded number".pnpm check:cross-package-test-inputs— "OK: 13 package(s) read outside themselves, all declared, and turbo.json hashes every declared glob".node scripts/check-ci-filter-parity.mjs— "OK: all 84 declared cross-package glob(s) (73 unique) are covered by core or crosspkg".pnpm check:pm-skill-ratchet— "✓ check-skill-line-ratchet: .claude/skills/spec-property-retirement/SKILL.md is 334 lines (ceiling 334; headroom 0)".pnpm lint(repo-wide eslint, no-inline-config) — exit 0 at head.dispatch-gatesover the actual change set: doc-authoring, skill-frame-sync, pm-governed-merges, required-contexts, node-version, shard-attestation, workflow-status-functions, aggregator-roster, step-collectors, liveness family, engine-double-contract, where-matcher, query-options-erasure, nul-bytes, type-check-coverage, and the rest) — all exit 0 at head 61adbc2; every exit captured by redirect-then-capture, never through a pipe.No changeset: this PR publishes nothing (internal skill, a test, root gate scripts, turbo and workflow config) — declared via the
skip-changesetlabel per this repo's mechanism.Generated by Claude Code
Generated by Claude Code