pm-dispatch: SKILL.md principle-only (815 → 319 lines) — dispatch / review / landing detail relocated into per-phase references, core-rules.md retired - #19805
Conversation
…n-duties.md Relocation only — every rule line moves verbatim; the ACCEPT path-fork block (the check:pm-governed-prose region) stays in SKILL.md under its own heading 路径分叉, and the five section pointers that named 〈派发〉/〈复核〉 are retargeted. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
…rences/seat-lifecycle.md Relocation only: the 开轮互斥 bullets of 入口与角色, 座位贴协议, Epic 子树车道, 轮次报告与节奏, 停止条件与待命 and 断粮与跨墙恢复 move verbatim; SKILL.md keeps one pointer line per moved block and the six lane charters plus seat-post-protocol retarget their 〈座位贴协议〉 pointer. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Relocation only — the section moves verbatim under its own title; the triage lane charter retargets its pointer. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Relocation only — the section moves verbatim; instrument-discipline, platform-readings and filing-gate retarget their pointer line. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Relocation only — the section moves verbatim; the hotcrm and ui lane charters retarget their 〈多仓协调〉 pointers. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Relocation only — the clause block lands ahead of the existing A–D operating detail; the file's opening line now names its reader and fire; contract-review (line 3 only) and external-contributions retarget their pointer. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
…inter to it and to the moved sections core-rules.md was the declared subset of SKILL.md; with the phase references in place it is a maintained duplicate. 优先级 drops the 核心条款 tier and the twin-maintenance line whose object no longer exists; SKILL.md gains the 阶段细则索引 (which seat reads which reference on which fire); the two dispatch-gates self-test specimens that named core-rules.md now name state-machine.md; check-half-states' H65 prescription names triage-duties.md. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
…the per-phase references in the ratchet map SKILL.md lowered to its landed count (降恒合法); landing-operations.md raised 69 → 101 as a declared CROSS-FILE MOVE sourced from SKILL.md (+32 against −500); core-rules.md's row and table pin leave with the file; the five new per-phase references enter at their landed counts with 0-byte table pins. Map total goes down. Self-test: 157 cases pass. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
…ill-md-principle-only
Contract reviewServed-tier: ① Derived judgmentsRendered in-seat by the skills seat 1 session at the served tier the maintainer named (ruling record 5771798588; 「契约复审继续用 fable 不变」 5788482806 of this date). The contract is the card #19716's ruled shape — decision batch #213 item 4, the maintainer's 「1 2 4 同意」, executed as the director's 直派 and re-pointed at 05:40 UTC of this date: relocation, not deletion, no semantic change;
② Semver levelNone — no release. ③ Boundary flags
Implemented-by: VERDICT: PASS |
Fixes #19716
Clause-②: no
维护者速读(草稿)
改了什么:PM 协议主文
.claude/skills/pm-dispatch/SKILL.md从 815 行压到 319 行,只留原则——红线、优先级、入口与角色(含参数表)、新增的「阶段细则索引」表、全体座位的不变量、状态模型、域车道、受管面的「路径分叉」块、升级与决策(含四轴框架单源)、报告契约、机械守卫索引、模板与表。派发 / 分诊 / 座位生命周期 / 读数纪律 / 多仓协调 / 入队与落地的细则逐字搬进六份按阶段读的 references(五份新建:seat-lifecycle.md、reading-discipline.md、cross-repo-coordination.md、triage-duties.md、execution-duties.md;既有的landing-operations.md吸收「入队与落地」),每份第一行写明哪个座位在哪个 fire 读它。references/core-rules.md(SKILL.md 的人读摘要副本,151 行)删除,所有指向它和被搬章节的指针重定向。行数棘轮把 SKILL.md 上限从 819 降到 319,新文件按落地行数入表,棘轮总量下降。为什么改:决策批 #213 第 4 项,维护者原话「1 2 4 同意」,项目原文「协议主文 819 → 约 300 行(红线 + 状态模型 + 入口 + 索引),派发 / 复核 / 入队细则各成一份按阶段读的 reference;同时删 core-rules.md 双份」。目的是每个座位每次 fire 只读本阶段的文件,不再整本重读 815 行外加 151 行的副本。
风险与代价(含回滚):纯搬迁,无语义变化——被搬的 465 条规则行里 459 条逐字相同,5 条只改了指针拼写(指向新家),1 条自指指针删除;「⛔」行数搬前搬后相等(对合并基点 558 对 558,对派发基点 559 对 559;都不计被删副本自带的 59 行)。代价落在指针:部分 references 的指针行受 120 字节行宽与零余量约束,只写文件名不写章节名(章节标题在新文件里原样保留);两个门禁脚本各改了一处指向路径(自测通过)。SKILL.md 落在 319 行——高于「约 300」但低于 340 上限——多出的部分是
check:pm-governed-prose锚定在 SKILL.md 里的受管面路径分叉块(28 行)加索引表(11 行)。回滚 = revert 本 PR(一个 squash commit);棘轮上限已降,回滚时抬回需维护者裁决引用。席位意见:(席位填写)
你要做的:本 PR 属 Tier S(路径全在
.claude/**与scripts/pm/**),由 skills 席在席内契约复审 PASS 后走队列落地,不需要你点击。若对新文件命名、或 SKILL.md 保留 319 行而非约 300 行有异议,在本 PR 评论一句即可。What this PR does
Relocation, not deletion — decision batch #213 item 4 (maintainer, verbatim: 「1 2 4 同意」). Every rule line of
SKILL.mdon the base (fae870352, 815 lines) ends up in exactly one place:SKILL.mdif it is principle, otherwise one per-phase reference.references/core-rules.md(the declared subset / human digest, 151 lines) is deleted. No rule added, no rule dropped, no gate / hook / ratchet / roster added;os-dev.md,AGENTS.mdandskills/**untouched.Six destination files, one commit each (the branch is bisectable by destination):
references/execution-duties.md(new)landing-operations.md。references/seat-lifecycle.md(new)references/triage-duties.md(new)references/reading-discipline.md(new)references/cross-repo-coordination.md(new)references/landing-operations.md(existing, absorbs 入队与落地)Why two files beyond the card's suggested shape: 平台读数纪律 and 多仓协调 are read by BOTH seats (readings are taken on every fire; cross-repo routing is triage's, cross-repo claiming/dispatch is execution's). Folding either into one seat's phase file would make the other seat skip it — a rule dropped in effect — and keeping both in
SKILL.mdlands it at 367 lines, over the 340 ceiling. Each gets a single-section file whose title is the section heading, so every 〈heading〉 pointer still resolves.Section → destination (base line spans of
SKILL.mdatfae870352)seat-lifecycle.md〈开轮互斥〉reading-discipline.mdcross-repo-coordination.mdseat-lifecycle.md〈座位贴协议〉seat-lifecycle.md〈Epic 子树车道〉triage-duties.mdexecution-duties.mdexecution-duties.md〈候选与批次〉〈认领〉〈派发〉〈收集〉execution-duties.md〈复核〉## 路径分叉—check:pm-governed-proseanchors its SKILL.md region on exactly these two lines, andcheck-expected-skips.mjs's self-test pins the 入队资格 line at 637landing-operations.md〈入队与落地〉 (644, a self-pointer to that very file, dropped)seat-lifecycle.md(收班)abff5f852c8fd09b79ec0623439aa4f0), 报告契约, 机械守卫索引, 模板与表New in
SKILL.md:## 阶段细则索引(a 6-row table: file · which seat reads it on which fire · sections it carries), one pointer line in 入口与角色 to 〈开轮互斥〉, and the## 路径分叉heading. SKILL.md: 815 → 319 lines (≈ 300 target, ≤ 340 ceiling; the excess over 300 is the retained 28-line governed-prose block plus the 11-line index).Proof: relocation, not deletion
Measured by an independent verifier over the working tree against
git show de4ed33fd:…(the merge base; script in the report):SKILL.mdlines: 302 / 302 present in their original order (the three rewritten and the one dropped 优先级 line excepted, listed below).de4ed33fd: before 617 (SKILL.md194 +references/**423, of whichcore-rules.md59) — after 558 (SKILL.md68 +references/**490). Excluding the deleted duplicate's own 59 lines: 558 == 558. (Against the dispatch basefae870352the same proof reads 618 → 559, the one-line difference being docs(pm): a suspended seat account is a dead session — takeover, re-rendered records, retriage, durable state #19795's edit toseat-post-protocol.md, merged in.)check:skill-frame-syncand-freshnessgreen).Pointer retargets (every one in place, same line count, ≤ 120 bytes)
Inside moved text (the 5 rewrites): 89 「三章程(本文、core-rules、本席章程)」→「SKILL.md、阶段 references、本席章程」(the touch-check set follows where the rules now live; core-rules gone); 183 「(见认领节)」→「(见 execution-duties.md 认领)」; 491 「照抄 模板与表 节」→「照抄 SKILL.md 模板」; 612 「见 升级与决策 节」→「见 SKILL.md 〈升级与决策〉」; 694 「按收集节②」→「按
execution-duties.md收集节②」.In
SKILL.md: 42 drops the 「核心条款」 tier from the priority chain (the file it named is deleted; no new tier introduced); 43 now points atreferences/**and 〈阶段细则索引〉 instead ofcore-rules.md; 44 「一条规则在本文与核心条款一处改动,另一处同 PR 同改」 dropped — its whole object is the deleted duplicate; 56 「见 Epic 子树车道 节」→references/seat-lifecycle.md〈Epic 子树车道〉.In references (line 3 unless noted):
review-checklist.md→execution-duties.md〈复核〉;compile-surfaces.md→execution-duties.md;true-green.md,lanes/devx.md:19,lanes/skills.md:10 → SKILL.md 〈路径分叉〉;lanes/{cli,devx,engine,services,skills,spec}.md→seat-lifecycle.md;seat-post-protocol.md→seat-lifecycle.md〈座位贴协议〉;lanes/triage.md:2 →triage-duties.md;instrument-discipline.md,platform-readings.md→reading-discipline.md;filing-gate.md→triage-duties.md与reading-discipline.md;lanes/hotcrm.md,lanes/ui.md:3/13/19/21 →cross-repo-coordination.md;contract-review.md:3 →landing-operations.md〈入队与落地〉 (lines 13 / 19 byte-identical, #19061 step ④'s);external-contributions.md→landing-operations.md. Where the retargeted line sits at the 120-byte cap in a headroom-0 file, it cites the file without the 〈heading〉; the heading itself is unchanged inside the destination.In scripts:
scripts/pm/dispatch-gates.mjs25403 / 26508 — the two self-test specimens that namedreferences/core-rules.mdnow namereferences/state-machine.md(an internal references file that exists; the assertion, "carries no mandate", is unchanged);scripts/pm/check-half-states.mjs15523 (H65 prescription) plus its two docblock lines 15104 / 15171 —SKILL.md 〈分诊座位职责〉→references/triage-duties.md 〈分诊座位职责〉.Ceiling map (
scripts/pm/check-skill-line-ratchet.mjs), before → afterSKILL.mdreferences/landing-operations.mdSKILL.md819 → 319: +32 against −500, authorised by #14685 item 5 (comment 5520452691)references/core-rules.mdreferences/seat-lifecycle.md·reading-discipline.md·cross-repo-coordination.md·triage-duties.md·execution-duties.mdGates (exits captured before any pipe)
All families below ran on
8df1e7e52; after mergingorigin/main(de4ed33fd, three commits: #19792, #19795 and a spec changeset, none touchingscripts/pm/**) the ratchet family,check:pm-skill-id-lint,check:skill-frame-sync,check:skill-frame-freshness,check:pm-governed-proseandcheck:nul-byteswere re-run on the merged headf20de6220, all exit 0, and--ranre-reconciled there (derived list unchanged).The five the card names:
check:pm-skill-ratchetexit 0 (SKILL.md is 319 lines (ceiling 319; headroom 0);declared cross-file moves: 2, total ceilings down 477 lines; self-test 157 cases) ·check:pm-skill-id-lintexit 0 (34 files clean) ·check:skill-frame-syncexit 0 (one declared copy, coherent) ·check:skill-frame-freshnessexit 0 (current with origin/main) ·check:pm-governed-proseexit 0 (2 instruction surfaces name all 6 governed surfaces).Derived by
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands(50 families from the merge-base change set, 29 paths) and reconciled with--ran:Run reconciliation — 50 derived, 50 run, 0 NOT-MEASURED, 0 UNRUN, every family recorded with its exit code (dispatch-gates --ranexit 0; the one extra,check:skill-frame-freshness, is outside the derivation). Among themcheck:pm-half-statesexit 0 (4897 cases; the H65 battery reads the retargeted prescription),check:pm-governed-mergesexit 0,check:pm-expected-skipsexit 0 (its SKILL.md enqueue-bar pin still holds — the line stayed),check-governed-queue-guard.mjs --self-testexit 0,check-harness-current.mjs --self-testexit 0,check:doc-authoringexit 0,check:nul-bytesexit 0,check:commit-card-trailersexit 0.check:pm-dispatch-gatesexit 0 —✓ dispatch-gates self-test: 1905 cases pass(the battery took 713.0s on this box; run detached as its header prescribes, exit captured to a file).check:doc-formula-expressions(derived only becausedispatch-gates.mjsis edited) exit 0 after its prerequisiteturbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the verify lock (VERDICT command-exit 0): 22 record-scoped examples across 456 files clean.Changed lines: 623 additions + 710 deletions = 1,333 (under the 5,000 human-merge threshold).
check-governed-merges.mjs --branch claude/issue-19716-skill-md-principle-only(offline, merge-base): exit 3 GOVERNED — Tier S(席内达档复核落地),.claude/** ×26,scripts/pm/*not on the register, size 1,333 ≤ 5,000; the--prreading (head repo) is in the report.Readings on the base that differ from the card
references/lanes/director.mdandscripts/pm/git-history.mjscarry nocore-rulesreference onfae870352(git grep -c core-rules→ 0 for both). The 「三章程 touch list」 the card attributes togit-history.mjsis SKILL.md line 89 (the tool isgit-history.mjs touch); it is rewritten as listed above.origin/mainwhile this branch was in flight and the merge brought the ruled wording in cleanly (now SKILL.md line 175). Nothing of another card's is pre-applied here.Acceptance notes
scripts/pm/check-clause2-carriers.mjs3940–3941 andscripts/pm/check-governed-queue-guard.mjs272–273 — attribute 「记录 = 同形评论落 PR 或卡」 toSKILL.md 〈入队与落地〉; the phrase is nowhere inSKILL.mdon the base (pre-existing staleness). Left untouched: retargeting the pointer would keep a false claim. 承接者: skills seat (a one-line docblock correction when either file is next edited).scripts/pm/check-clause2-carriers.mjsprose that says "SKILL.md's handover sentence" (itsCLAIM_HANDOVER_SENTENCE_LINEStwin now lives inexecution-duties.md〈认领〉, byte-identical) — file-name-only prose, no heading pointer; left. 承接者: same.check:doc-formula-expressionsis derived for this change set only throughdispatch-gates.mjsbeing edited; it needs@objectstack/formulaand@objectstack/lintbuilt first (exit 3 = prerequisite, not a finding, until built).Changeset
skip-changeset: every changed path is under.claude/**orscripts/pm/**, which are in no package'sfiles[]— nothing published moves.Generated by Claude Code