Skip to content

fix(skills): teach the house migrate-sentence in spec-property-retirement and widen the pin's population by that one file - #11092

Merged
os-zhuang merged 3 commits into
mainfrom
claude/issue-10848-retirement-skill-house-sentence
Aug 22, 2026
Merged

fix(skills): teach the house migrate-sentence in spec-property-retirement and widen the pin's population by that one file#11092
os-zhuang merged 3 commits into
mainfrom
claude/issue-10848-retirement-skill-house-sentence

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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 .claude tree.

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 mechanical applied set (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 existing WITHDRAWN_CLAIM regex 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:

AssertionError: Run `os migrate meta --from N-1` to rewrite it automatically. ... expected [ Array(1) ] to deeply equal []

(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 retiredFromLoadPath bullet 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 escapes packages/spec, so check:cross-package-test-inputs requires the declared glob and the matching turbo $TURBO_ROOT$ input (one file, not a subtree).
  • .github/workflows/ci.ymlcheck:ci-filter-parity requires the declared glob verbatim in the crosspkg scheduling 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.
  • Full derived battery (36 light families from dispatch-gates over 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-changeset label per this repo's mechanism.

Generated by Claude Code


Generated by Claude Code

claude added 2 commits August 22, 2026 15:46
…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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.

Copy link
Copy Markdown
Contributor Author

CI note (say-once): Console Pin Gate red on this head is the known, carded, ruled signature — the six retired spec/ui theme schemas vs the pinned objectui (#10856, pm:blocked on objectui#5710; red on main's own runs too). It runs here only because this PR touches ci.yml, which selects the path filter. Not this PR's failure; no fix will be pushed for it and it is measured non-blocking. The real red being fixed in the in-flight patch round is the check-ci-filter-parity --self-test pinned counterfactual (10 → 11).


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
@github-actions github-actions Bot added size/m and removed size/s labels Aug 22, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 22, 2026 16:58
@os-zhuang
os-zhuang enabled auto-merge August 22, 2026 16:58

Copy link
Copy Markdown
Contributor Author

re-ACCEPT 确认(补丁轮收口):补丁头 9219437d(check-ci-filter-parity --self-test 修复,钉数 10→11 + 按名断言,37 断言)已由 CI 按名验证——Lint & Repo Gates conclusion success(run 32586086824)。此前 ACCEPT 结论全部维持。Console Pin Gate 红为已定性的既有非 required 红(objectui 控制台 pin 过期,阻塞在 objectui#5710,与本 diff 无涉),不挡合并。维护者已布防 auto-merge,required checks 绿齐即自动入队合入,无需再操作。


Generated by Claude Code

@os-zhuang
os-zhuang added this pull request to the merge queue Aug 22, 2026
os-zhuang pushed a commit that referenced this pull request Aug 22, 2026
…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
Merged via the queue into main with commit 147f9cd Aug 22, 2026
32 of 33 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-10848-retirement-skill-house-sentence branch August 22, 2026 17:26
@github-actions

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 32586914191 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Console Pin Gate — 失败步骤: Build the Console SPA at the pinned objectui SHA

    ✗ Build failed in 6.12s
    

↳ 失败原因 是判读的关键:超时Test timed out in … / Hook timed out in …)多半是负载/时序,不是本 PR 的回归;
断言AssertionError: …)才指向真实的行为改变。两者的 FAIL 行长得一模一样,只有这一行能区分。

跨 PR 相同签名(24h,按失败测试文件聚合):

  • ⚠️ 本次没有可用的聚合签名(日志里没有能解析出测试文件名的 FAIL 行)—— 这不是「没有同签名的其他 PR」,是这一轮没测到。跨 PR 聚合本次不可用,请手工比对其他 PR 的同类评论。
  • ⚠️ 24h 评论账本没读完(超过 5 页仍未读到窗口尽头),所以上面的「不同 PR 数」是下界,不是全量。

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 81 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 看上面的「跨 PR 相同签名」;已有汇总 issue ⇒ flaky/环境问题实锤,去那张 issue 上谈,修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

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

Labels

ci/cd documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

2 participants