Repository navigation
docs(skills): point spec-property-retirement at the split conversions layout - #30109
Conversation
… layout
The conversion step now names the per-entry module under
conversions/entries/<toMajor>/<id>.ts and the one import line in the
hand-written registry.ts; the step-18 note names the
{ conversion, order } list entry and where its import goes. A duplicate
pointer to AGENTS.md's regenerate table is cut to hold the line ceiling.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J8VVAnsgwGBowbBtYDCHyu
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 6837342 · 2026-11-04T14:09Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). No review seat ( Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented), fed the card body and comments, the PR body, the net diff against the merge-base, the head's check-runs, AGENTS.md, the pm-dispatch SKILL.md contract-review section, contract-review.md, review-checklist.md, lanes/skills.md and lanes/review.md. The dev gate record was read as input, not as conclusions; every count and every claim about ① Derived judgments
② Semver levelNone — nothing publishes. The one path is ③ Boundary flags
④ Design judgmentPer hits file, against the card's scenario (a dev following the retirement skill after #29993 must create the conversion as a module under
Must-fix: none. Should-fix: S1 — reword L177's 「只加 import」 to name both lines, e.g. 「手写提交、无生成器的 Check-runs at record time (2026-11-04T14:24Z): 45 check-runs on 6837342, 24 success, 20 skipped, 0 failure, 1 in progress on the fifth read (the Implemented-by: VERDICT: PASS Generated by Claude Code |
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAnsgwGBowbBtYDCHyu
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 22e2202 · 2026-11-04T14:36Z Delta review against the PASS at head 6837342 (comment 6633148272): S1 in the new commit, and S2, S3 and the slips in the PR body. The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent. No review seat ( Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: the same isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented). The full review on 6837342 (PASS, should-fixes S1, S2 and S3, three immaterial slips) stands as read; this record judges only the delta ① Derived judgments
② Semver levelUnchanged: none — nothing publishes. The delta is one prose line in ③ Boundary flags
④ Design judgmentPer hits file, for the delta only:
Must-fix: none. Should-fix: none remaining — S1, S2, S3 and the three slips of 6633148272 are all resolved on this head and in the live body. Check-runs at record time: 44 check-runs on 22e2202, 25 success, 19 skipped, 0 failure, 0 in progress on the third read (the first two reads had one in progress each: Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J
Requested by Irene · project thread
Part of #29994
Clause-②: no
Metadata-protocol: none
The maintainer waived the model-tier mandate for governed rule text while that tier had no quota; this PR was developed below it.
维护者速读
.claude/skills/spec-property-retirement/SKILL.md§3 的两步改指 refactor(spec): codemod split of conversions/registry.ts into per-entry modules (#29987) #29993 拆分后的布局。conversion 那步写明「单独一个模块conversions/entries/<toMajor>/<id>.ts,按名 export;手写、无生成器的registry.ts加 import 与列表项」;18 步那句写明在MAJOR_18_CONVERSIONS按标识符插入{ conversion, order },import 放在后继条目的 import 正上方。conversions/registry.ts拆成每条一个模块后,技能仍教人在registry.ts里写 conversion 本体。@objectstack/skills),行数仍 337(上限 337);回滚即 revert。.claude/**属 Tier S,由所属席位在合同评审记录与全绿检查之上经队列落地,不需要GOVERNED_APPROVERS批准。registry.ts里MAJOR_18_CONVERSIONS头注的改写留在 .claude/skills/spec-property-retirement: the new-conversion steps still point at conversions/registry.ts, which the #29987 codemod splits into entries/ plus an index #29994 上,归 spec 车道。What changes
.claude/skills/spec-property-retirement/SKILL.md, §3 (registration surface):MetadataConversionstep (L176-180). It used to say the conversion is written inpackages/spec/src/conversions/registry.ts. It now says each conversion is a module of its own atpackages/spec/src/conversions/entries/<toMajor>/<id>.ts, the file named for theidand the conversion exported by name, and thatregistry.tsgains its import and its list entry. It also saysregistry.tsis hand-written, with no generator. The sharedstripKeyshelper is now located atentries/shared.ts. The rest of the step (id suffix,emitper key,fixture.expectedNotices, the walkers inwalk.ts, copy-on-write) is unchanged. These five lines were re-flowed because their content changed; L181 is byte-identical.MAJOR_18_CONVERSIONSsorted by identifier". It now names the line,{ conversion, order }, inserted by identifier as the list's header says, and where its import goes: directly above the import of the entry that follows it. The header comment still speaks of the definition's place; since the split, the merge test reads that place as the import (packages/spec/scripts/conversions-major18-merge.test.tsL25-31), so the line says so. L215 and L218 onward are byte-identical.Read off
mainatf68b47ca: the layout ofconversions/entries/, the codemodscripts/codemod-split-conversions-registry.mjs(one-shot, not a generator:entries/<toMajor>/<id>.tsread off the conversion's ownidliteral), theMAJOR_18_CONVERSIONSheader comment, and the merge test's header. Unlike the migrations registry the step above describes (registry.ts.template+gen:migration-registry, git-ignored output), the conversionsregistry.tsis committed and hand-edited (the merge test: "The file is hand-written, so nothing regenerates it").Line ceiling.
check-skill-line-ratchet.mjspins this file at 337 lines with 0 headroom. The step-18 note grew by one line, which is paid by deleting §4's L263 「「改了 X → 重新生成 Y」的表见 AGENTS.md。」. That is a duplicate pointer: L33-35 already sends the reader to AGENTS.md §"Touchedpackages/spec?", which is where that table lives (AGENTS.md L650-665), and L330 points there again. No line was re-wrapped to make room.Changeset.
node scripts/check-empty-changeset.mjs --base origin/mainexits 0 with no changeset. The diff is.claude/**only and releases nothing, so this PR takesskip-changeset(pr-automation.yml route 2).Why
PR #29993 (#29987) split
conversions/registry.tsinto per-entry modules and filed this follow-up in its body: the skill still tells devs to write a new conversion insideregistry.ts.Verification
Head
22e2202b, two commits onf68b47ca:68373420(the edit) and22e2202b(review S1: L177 names bothregistry.tslines, 「加 import 与列表项」, 119 bytes, line count unchanged).Local gates on 22e2202: 19 derived, 19 run with exit 0, 0 NOT MEASURED (`dispatch-gates --ran`)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 19 commands for the one changed file. All ran afterpnpm install --frozen-lockfileand aturbo run buildof@objectstack/formula,@objectstack/lintand@objectstack/objectql(both exit 0, on the first head; the S1 re-run reused that tree), each under a 900 s timeout with its exit code captured before any pipe.check-comment-mask-corpus.mjs,check:pm-skill-ratchet,check:skill-frame-sync,check:doc-authoring,check:cross-package-test-inputsandcheck:ci-filter-parity.pnpm check:pm-settings-deny-roster(roster under.claude) andpnpm check:pm-governed-proseboth exited 0.packages/spec/src/shared/retired-key-migrate-sentence.test.ts, which reads this SKILL.md: 15 of 15 passed.node scripts/pm/check-skill-line-ratchet.mjs: exit 0 (337 lines, ceiling 337).--ranprinted:19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED.node scripts/check-empty-changeset.mjs --base origin/mainandnode scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0.Human Minimum
packages/specholds no runtime logic. (Not touched.)main, one pull request..claude/**only;skip-changeset.)packages/spectouched: its generated artifacts are regenerated and committed. (Not touched.)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01J8VVAnsgwGBowbBtYDCHyu