Repository navigation
pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748
Description
Activity
- addedpriority:p2Medium: important, M3Medium: important, M3
on Sep 12, 2026 Scheduling (skills seat): read in full at 2026-09-12T02:16Z. Lands in
references/decision-analysis.md(two edits, the 推荐 item and the 四棱卡面块 recommendation row) with at most one pointer clause inSKILL.md— governed, so the maintainer hand-merges.typeset to Task here: the card arrivedpm:queuep2 with notypeand is not afinding, so the grade is the triage seat's act that did not happen — recorded as a triage gap like #17727, ⛔ no priority change (the director seat's p2 stands on the maintainer's word). Serial:decision-analysis.mdis 50/50 one9efc403and PR #17515 (#17009 D1) at the human terminal touches it ⇒ this card is queued behind PR #17515 on that file's chain; the ratchet ceiling for the file rises to the landed count in the same PR (the maintainer ordered the text, so the raise is the ruling's cost, not a gate weakening to be re-decided). Dispatch tier when its turn comes: default-tier build (references/**), skills-seat review at the contract-review tier; the dev re-derives nothing — the four elements in the card's Acceptance 1 are the spec. Skills seat, sessionsession_01MCLBsUgfykL74aU716rzVK, 2026-09-12T02:20Z.
Generated by Claude Code
Scope extension — maintainer calibration of 2026-09-13: the director seat runs the class-one gate on every inbox card BEFORE presenting, and a consumer aligning to the protocol never spawns a card that asks the protocol (director seat, 2026-09-13T06:58Z)
Maintainer, verbatim (live PM chat, 2026-09-13T07:0xZ), on decision batch #129 item 2 (objectui#9306, which the seat had presented with a proposed spec card):
「你是项目总监,9306 这种为什么你不直接决策呢?而且不是说要以协议为准吗?还需要立卡问 spec 多次一举啊。这个也需要更新skills。其他同意。」
This card already carries the ①-first self-check for the recommendation item. The same summon produced two more charter items; recorded here so one skills PR carries all three, ⛔ not three cards.
Item 2 — the class-one gate is run on every inbox card before it is presented
SKILL.md:400-403already lets the summoned director seat self-adjudicate a card when the three criteria hold. What is missing is the ORDER: the charter should say the gate is applied to everyneeds-user-decisioncard as the first step of 决裁勤务, and a card that passes is ruled and recorded for the 追认表 — it never reaches a presented batch. objectui#9306 (route 2 = pull a consumer surface back to the protocol's declared set,SKILL.md:395) passed all three and was presented anyway; the maintainer's question 「9306 这种为什么你不直接决策呢?」 is the defect. Wording to land: 「决裁勤务第一步:逐卡过一类自裁三判据;全立者本席录裁不呈,只入收班追认表;呈报批只由二类/三类组成。」Item 3 — 「以协议为准」 means the protocol is the answer, not a question
A consumer surface (objectui type, dropdown, form, adapter) that diverges from the protocol's declared set is aligned to it; capabilities the protocol does not name are dropped, ⛔ not carried by a new spec card asking whether the protocol should gain them. A spec card is filed only when measured pull for the missing capability exists, and then it carries the pull. The seat's reflex on objectui#9306 (drop 4 dropdown ids → "file a spec card to ask") is the anti-pattern. Wording to land in
references/decision-analysis.mdbeside the ①-first check: 「消费面对齐协议 ⇒ 一类自裁;协议没有的能力 ⇒ 删,⛔ 不立卡问协议;有实测拉动才立 spec 卡并附拉动。」Item 4 — an ADR item superseded by the protocol gets a dated amendment note, never a rewrite and never silence
From objectui#9223 (ADR-0055 item 5 records a precedence the spec's
objectNavTargetExclusivityrefuses): Prime Directive #13 keeps an accepted ADR binding, so the record form for "the protocol has since decided otherwise" is a dated amendment note under the item naming the superseding spec symbol / card — the ADR convention (MADR "superseded by"), and the only form that keeps both the history and the binding text honest. Wording to land inreferences/core-rules.md: 「ADR 条目被协议取代 ⇒ 条目下加带日期的修订注记点名取代它的 spec 符号/卡,⛔ 不改写原文、⛔ 不留作无注记的历史。」⛔ Still no repo file written by the director seat.
pm:queue/domain:skills/priority:p2unchanged.
Generated by Claude Code
Addendum to item 3 — the maintainer's second sentence, 2026-09-13T07:0xZ, verbatim: 「协议就是答案,但是协议是否正确也是需要你考虑的,从平台长远合理性的角度考虑,并参考主流相关平台」
Item 3 is refined accordingly, ⛔ not reversed: 「以协议为准」 has two halves for the director seat. (i) Consumers align to the protocol, and no card is filed to ask the protocol. (ii) Whether the protocol itself is right is the seat's own axis-① judgment, made by READING the protocol and comparing it with mainstream platforms; where the protocol is found wrong, the seat rules the protocol change (or presents it when a floor is touched) — the spec card is then an execution card carrying the ruling, never a question. Wording to land: 「消费面对齐协议 ⇒ 一类自裁,⛔ 不立卡问协议;协议本身是否正确由本席按①读协议原文、参照主流平台判定 —— 判定协议有误 ⇒ 本席裁协议改动(触地板则呈),spec 卡承载裁决而非提问。」
The defect that produced this addendum is recorded as its own example: on objectui#9306 the seat ruled on a 14-member operator set copied from the card without opening
packages/spec/src/ui/view.zod.ts:243, where the protocol's set is 20 and already names every dropdown capability (amendment 5651809976 → see the card). Reading the protocol before ruling on it is the first step of the check, ⛔ not an optional one.
Generated by Claude Code
Item 5 — from #17712 (ruled A′+B, 2026-09-13): one line in the dev-round guidance, 「新 changeset 文件名用
<issue>-<slug>.md,⛔ 不用随机词对名」. The gate half (A′) is #17712's own; this card carries only the rule line, so the skills PR lands items 1–5 together.
Generated by Claude Code
Item 6 — a ruling exists only on its own card, in a fixed machine-readable header; nothing else counts as a ruling (from the #17306 misread, maintainer question 2026-09-13 「如何避免?」)
What happened. The
domain:specseat read a maintainer reply (「其他同意」, decision batch #129) that did not cover #17306, and doubted whether #17306 (ruled A′ in batch #130) had a letter. The ruling was on the card (5651909056) with the batch line and the verbatim reply, so the record was right; the seat read a chat phrase / ledger line instead of the card.Rule to land (three lines).
- Only the card carries a ruling. A seat acts on a decision-box outcome only when its own card carries a
## Ruling recordedcomment from the director seat. A maintainer phrase in any chat, a ledger row on a seat post, or a quote on another card is ⛔ not a ruling for this card — 「其他同意」 covers exactly the items of the batch line it answered, and that line is written on each card it covers. - Fixed header line, first line of the ruling comment, one per card:
Ruling: batch #<n> item <k> · letter <X> · maintainer 「<verbatim>」 <UTC>. Batch, item, letter and the verbatim reply in one greppable line, so batch membership cannot be misread from prose. - Claims cite the ruling. When a seat claims or dispatches a card that came out of
needs-user-decision, theClaim:block carriesRuling-ref: <comment id>; the half-state patrol flags a former decision card dispatched without one, and the referenced comment must be on the same card with the header above.
Why this and not a broadcast. Sending rulings to seats' chats creates a second channel that can disagree with the card; the card is the only place the director, the seat, triage and the maintainer all read. The header makes the one record unambiguous; the
Ruling-ref:makes acting-without-a-record visible.Director seat, 2026-09-13T07:42Z. ⛔ Still no repo file written by the director seat; the skills PR carrying items 1–5 carries this one too.
Generated by Claude Code
- Only the card carries a ruling. A seat acts on a decision-box outcome only when its own card carries a
Claim: PM loop round 1
Session:session_01DAcomhvR9kKizeYgg89Vo8(GitHubos-project-manager, skills seat), claimed at 2026-09-13T09:33Z
Branch:claude/issue-17748-recommendation-self-check-and-director-items
Worktree:objectstack-issue-17748
Domain:domain:skills(governed.claude/**; p2 Task, filed by the director seat on the maintainer's word; items 2–6 added by the director seat this morning)
Ruling-ref: 5642823516 (item 1, scheduling), 5651810710 (items 2–4), 5651830003 (item 3 addendum), 5651909646 (item 5), 5652015750 (item 6)
File surface (three governed files, each at its ratchet ceiling ⇒ net 0 per file, paid by density inside the section touched; ⛔ no re-wrap as currency, ⛔ no ceiling raise, each line ≤120 bytes, ⛔ no issue numbers in operational text):references/decision-analysis.md(50/50) — item 1: the 推荐 item at :32 and the 四棱卡面块 recommendation row at :46 gain the ①-first derivation and the self-check with the literal marker 「只看①选」 (≥2 hits after);references/lanes/director.md(72/72) — item 2 (the class-one gate is the FIRST step of 决裁勤务 on every inbox card, a passing card is ruled and recorded, not presented), item 3 + addendum (「以协议为准」: consumers align to the protocol, no card asks the protocol; whether the protocol is right is the seat's own axis-① reading of the protocol text and mainstream platforms), item 4 (an ADR item superseded by the protocol gets a dated amendment note naming the superseding spec symbol — never a rewrite, never silence; objectui#9223 → PR #9377 is the first instance), item 6 (a ruling exists only on its own card, first lineRuling: batch #<n> item <k> · letter <X> · maintainer 「<verbatim>」 <UTC>; nothing else counts);references/dispatch-runbook.md(241/241) — item 5 (「新 changeset 文件名用<issue>-<slug>.md,⛔ 不用随机词对名」 beside :214) and item 6's claim half (a claim or dispatch of a card that came out ofneeds-user-decisioncarriesRuling-ref: <comment id>on the same card). ⛔SKILL.mduntouched (occupied by PR #17957; :756–:758 stays the single source, at most one pointer clause deferred to the charter PR); ⛔core-rules.mduntouched; the patrol row for item 6 (check-half-states.mjsflags a former decision card dispatched withoutRuling-ref:) is a separate mechanical card the seat files, ⛔ not this PR.
Container & model:M,mode:subagent,model: opus(no path mandate forreferences/**); seat review at the contract-review tier; governed ⇒ draft PR + four-piece, then lands under ruling C (#17971) once an authorized approval exists
Clause-②: no
Thread-read: 5652015750 (item 6, 2026-09-13T07:42Z — the newest comment at this claim)
Serial constraints cleared: PR #17515 (decision-analysis.md) landed 2026-09-13T08:35Z and PR #17956 (dispatch-runbook.md) landed 2026-09-13T09:18Z; of 21 open PRs only #17957 touches this lane's files (SKILL.md, core-rules.md — not on this surface; read at 2026-09-13T09:32Z); the charter PR (chain head #17942) queues behind this one ondirector.mdanddispatch-runbook.md; H17 index ∩ this face = ∅; verify lock free at 2026-09-13T08:16Z.
Generated by Claude Code
os-dev-report
{
"issue": 17748,
"status": "done",
"branch": "claude/issue-17748-recommendation-self-check-and-director-items",
"pr": "#17992",
"premise_still_valid": true,
"summary": "All six ruled items landed in ONE draft PR across exactly three governed files, nothing else touched. decision-analysis.md: the 推荐 item now derives the letter from axis ① alone (end-state sentence naming a mainstream reference), ②③④ adjust only timing/staging and cannot flip the letter, a self-check row carries the literal marker 「只看①选」, the two hard filters (契约迁就实现 / 分期半量) are stated, and 「不沿用他席推荐」 is on the item line; the 四棱 recommendation row gained the same self-check. lanes/director.md: the class-one gate is the FIRST step of 决裁勤务 (a passing card is 录裁转工作态 plus 收班追认表, not presented), 「以协议为准」 in both halves, a dated ADR amendment note naming the superseding spec symbol, and a ruling exists only on its own card under a fixed first-line header. dispatch-runbook.md: the changeset-name rule beside the 模型标识 block, and the Ruling-ref half folded into the existing 出决策箱 clause. Each file is at its ratchet ceiling with headroom 0, so every added line was paid by deleting a clause whose rule survives at a named site.",
"tests": "Gates derived with 'node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack' (no paths; change set taken by the tool from the merge base 00c332b, 3 committed paths, 0 working-tree, 0 untracked). 14 families derived, 14 run, ALL exit 0; reconciled with --ran recording each exit code, giving '14 derived, 14 run, 0 NOT-MEASURED, 0 UNRUN' and a DERIVED (not claimed) zero. 'pnpm --filter @objectstack/lint run check:doc-formula-expressions' first exited 3 = PREREQUISITE NOT MET (nothing measured); after 'pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2' run under 'bash scripts/pm/os-verify-lock.sh -c' (VERDICT command-exit 0, held 2s, waited 0s) it re-ran and exited 0. check:pm-governed-prose run in addition (named in the dispatch, outside the derivation), exit 0. Ratchet verdict lines, verbatim: '.../references/decision-analysis.md is 50 lines (ceiling 50; headroom 0).' and '.../references/lanes/director.md is 72 lines (ceiling 72; headroom 0).' and '.../references/dispatch-runbook.md is 241 lines (ceiling 241; headroom 0).' No ablation applies: a documentation-only diff has no executable behaviour to mutate. Byte sweep: 0 lines over 120 bytes across the three files; control-character sweep with grep -naP over the three files exits 1 (no hits). 'git diff --stat origin/main' = 3 files, 18 insertions, 18 deletions.",
"acceptance_greps": {
"只看①选 in decision-analysis.md": "0 then 2",
"'Ruling: batch' header in lanes/director.md": "0 then 1",
"Ruling-ref in dispatch-runbook.md": "0 then 1",
"changeset filename rule (card-number-plus-slug placeholder) in dispatch-runbook.md": "0 then 1",
"以协议为准 in lanes/director.md": "0 then 1",
"ADR 条目被协议取代 in lanes/director.md": "0 then 1",
"CONTROL 'Prior rulings read' in decision-analysis.md": "1 then 1",
"CONTROL 裁前先读线程 in lanes/director.md": "1 then 1, kept verbatim on its own line when :9 was split"
},
"files_changed": [
".claude/skills/pm-dispatch/references/decision-analysis.md",
".claude/skills/pm-dispatch/references/lanes/director.md",
".claude/skills/pm-dispatch/references/dispatch-runbook.md"
],
"line_budget": {
"references/decision-analysis.md": {
"before": 50,
"after": 50,
"ceiling": 50,
"added": "推荐 item 1 line becomes 4 lines (+3)",
"payments": [
":15 「裁后四件原子执行不再请示,一口气跑完;批间新入箱的卡滚入下一批。」 deleted; rule survives at lanes/director.md :43 plus :44",
":16 「收件箱读数为零才收工。」 deleted; rule survives at lanes/director.md :44 「收件箱清零才收工」",
":17's enumeration 「业务问题 + 每选项真实代价 + 四维 + 一个推荐」 deleted, remainder merged into :18; rule survives as the 正文六项 list itself"
],
"zero_cost_rewrite": ":46 四棱 recommendation row rewritten in place; it dropped the letter-option illustration and the 置信缺口 gloss, which survives on the 推荐 item line"
},
"references/lanes/director.md": {
"before": 72,
"after": 72,
"ceiling": 72,
"added": ":9 1 line becomes 3 lines (+2, item 6); item 3 second line (+1); item 4 line (+1); item 2 line inserted as the first bullet of 职责二 (+1)",
"payments": [
":23 「四维框架单源在 SKILL.md 〈升级与决策〉,本文不复制框架本体。」 deleted; folded into the file header :3, which already carried that pointer",
":25 「staged 选项仅凭具名外部用户证据才可荐。」 deleted; rule survives at SKILL.md :749",
":17's 「机械接手经派发 dev」 deleted, remainder merged into :16; rule survives at :31 「机械红可接手,经派发 dev 执行」",
":71 「契约复核的放行归派发席席内,定时轮与本席降为可选事后审计…」 deleted; rule survives at :28 plus the 职责一 heading's 「(可选)」",
":48 「入箱先退回:…按一类自裁录裁转 pm:queue 修文档,不呈批。」 deleted; replaced by item 2's general rule, of which it was the single named instance",
":46's 「改 ⇒ 重立协议卡,否则只议对齐」 deleted; superseded by item 3, and its 「协议原文(带文件)、是否改协议」 half survives at decision-analysis.md :21 段落骨架 and at the new 「按①读协议原文」 line"
]
},
"references/dispatch-runbook.md": {
"before": 241,
"after": 241,
"ceiling": 241,
"added": "item 5 changeset-name line (+1)",
"payments": [
":215 「豁免不再申报为偏差:一是 harness 的 Co-Authored-By 尾注,免的是申报,trailer pair 仍 model-free。」 deleted; rule survives verbatim in English at AGENTS.md :444. :216 rewritten from 「另一条是…」 to 「豁免:…」 so it does not dangle"
],
"zero_cost_rewrite": ":84 「出决策箱须引可取回的裁决 id」 gained the Ruling-ref half and dropped the 台账条目 alternative, which item 6 explicitly rules out; the underlying rule also stands at SKILL.md :733"
}
},
"gates": {
"derivation": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths)",
"reconciliation": "14 derived, 14 run, 0 NOT-MEASURED, 0 UNRUN (derived from recorded exit codes)",
"all_green": true,
"commands": [
"node scripts/check-closing-keyword-parity.mjs :: exit 0",
"node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
"node scripts/check-comment-mask-corpus.mjs :: exit 0",
"pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 3 PREREQUISITE NOT MET, then exit 0 after the closure build",
"pnpm check:agent-test-spelling :: exit 0",
"pnpm check:doc-authoring :: exit 0",
"pnpm check:driver-memory-census :: exit 0",
"pnpm check:nul-bytes :: exit 0",
"pnpm check:pm-governed-merges :: exit 0",
"pnpm check:pm-skill-id-lint :: exit 0",
"pnpm check:pm-skill-ratchet :: exit 0",
"pnpm check:refd-timer-probe :: exit 0",
"pnpm check:skill-frame-sync :: exit 0",
"pnpm check:watch-hint-literal :: exit 0",
"pnpm check:pm-governed-prose :: exit 0 (named in the dispatch, outside the derivation)"
],
"ci_status": "in_progress - CI convergence is the PM's read, not waited on here"
},
"premise_checks": {
"P1": "HELD. Verified in the worktree at origin/main 00c332b: decision-analysis.md :32 and :46 read exactly as quoted, the 四棱 block runs :35 to :46 and :45 IS the 'Prior rulings read:' line (kept; control 1 then 1); lanes/director.md 决裁勤务 is :40 onward with :48, :55 and :70 as quoted; dispatch-runbook.md :214 reads as quoted. WARNING for the PM: the SHARED checkout /home/user/objectstack is STALE - its decision-analysis.md carries no 'Prior rulings read' line and its :46 is a different clause. Every anchor was read from the fresh worktree, never from the shared tree.",
"P2": "HELD and extended. Re-read all 23 open PRs at 2026-09-13T10:0xZ. Three were opened after 09:32Z: PR 17990 touches references/contract-review.md (not this surface), 17988 and 17986 touch no pm-dispatch reference file. No open PR touches decision-analysis.md, lanes/director.md or dispatch-runbook.md. Note for the seat: this PR's deletion of director.md :71 leans on :28's pointer to ../contract-review.md, and PR 17990 edits that file - the pointer target, not the pointer.",
"P3": "HELD and used. lanes/director.md :9 carried the quoted line and became item 6's density site (split into :9 and :10, with the 裁前先读线程 half kept verbatim). decision-analysis.md :17 did overlap :32 and was folded into :18."
},
"deviations": [
"Payment site versus the dispatch's 'inside the section touched': three payments were taken where no in-section redundancy existed, and their rule survives in a DIFFERENT FILE - decision-analysis.md :15 and :16 survive in lanes/director.md :43 and :44; director.md :25 survives in SKILL.md :749; dispatch-runbook.md :215 survives in AGENTS.md :444. Every such site is named in the PR body table, so each claim is one grep away.",
"Wording compression against the card's proposed verbatim, under the card's Acceptance 1 (wording improvements that keep the four elements): 「答「是」时推荐仍为 X,加一句分期说明」 is folded into 「②③④ 只调时序分期 不翻字母」 - same rule, one line; and the 分期/半量 filter's exception half (「除非具名外部用户证据」) is not restated in decision-analysis.md because it stands at SKILL.md :749, which is also what pays for deleting director.md :25.",
"Item routing follows Zone 1, not the director-seat comments: item 3's wording landed in lanes/director.md (comment 5651810710 proposed references/decision-analysis.md) and item 4 in lanes/director.md (that comment proposed references/core-rules.md). core-rules.md and SKILL.md are untouched, as the dispatch required.",
"Reader-facing consequence of item 1's size: the 正文六项 list now spans ten bullet lines instead of seven (the 推荐 item alone is four). Item identity is by name, not by line count, and the label was already spread over seven lines before this PR - but the seat should judge whether the 推荐 block wants a visual marker, which the zero line budget did not allow here."
],
"labels": "skip-changeset applied via the additive REST endpoint and read back (present). The read-back also shows size/s, added by the size labeler - another actor's write, not corrected. No changeset file: none of the three paths appears in any package's files[], so .claude/** publishes nothing.",
"mcp_calls": "0 - every GitHub read and write went through repo-scoped REST with the container token; no MCP GitHub call was made in this run",
"open_questions": [],
"out_of_scope_findings": [
"noted, not filed: decision-analysis.md :39 declares the os-decision-facets marker's HTML-comment form equivalent to the plain-text one, while os-dev.md forbids HTML comments in GitHub bodies because the sanitizer eats them. Not a trap: :40 already carries the mitigation (注释形读不到永不读作无四棱块), so the file knows the comment form can be unreadable and tells the reader how to read that. Recorded as a boundary, not widened into a class. Carrier: the skills seat, on the next decision-analysis.md edit.",
"noted, not filed: decision-analysis.md :13 「每卡 = 六项写法 + 四棱块」 and the new :15 both name 六项 while the list is seven bullets before this PR and ten after. Pure labelling; no rule is wrong. Carrier: the skills seat, same next edit."
]
}
Generated by Claude Code
ACCEPT — skills seat (session
session_01DAcomhvR9kKizeYgg89Vo8), contract-review tier, read on PR #17992 head345b15e7at 2026-09-13T10:05Z (report read after the head).Scope against the claim (5652466496): the six ruled items across exactly
decision-analysis.md/lanes/director.md/dispatch-runbook.md, +18/−18, every file at its ceiling and net 0 — seat-verified: 「只看①选」 0 → 2,Ruling: batchheader 0 → 1, 「以协议为准」 0 → 1, ADR-amendment rule 0 → 1,Ruling-ref0 → 1,<issue>-<slug>0 → 1; controls 1 → 1; each of the ten density payments' survival site read on the head (named in the record).SKILL.mdandcore-rules.mduntouched. Declared deviations accepted: three payments survive in another file (all named); items 3/4 placed per the claim, not per the director comments' suggested files.--pair 17992exit 0; dev gates 14/14 exit 0. CI running at this write.Contract review of record: PASS, 5652606716 (head
345b15e7); 速读终稿 5652606845;needs-user-decision+ reviewers os-zhuang / hotlong on the PR (read back). Governed ⇒ awaits the ONE approval, then this seat lands it under ruling C. Card stayspm:dispatched+ assigned until MERGED. Out-of-scope notes (twodecision-analysis.mdboundary labels) carried to that file's next edit — no card.
Generated by Claude Code
LANDED — skills seat (session
session_01DAcomhvR9kKizeYgg89Vo8), 2026-09-13T11:51Z. PR #17992 merged through the merge queue at 2026-09-13T11:50Z as32a32143(merged_by os-zhuang; ruling C: os-zhuang's approval 5190546915 on head345b15e7at 11:27Z was the authorization, the maintainer flipped ready and enqueued, the seat did the four readings and cleared the label — 5652983467). Two readings at 2026-09-13T11:51Z: the queue refgh-readonly-queue/main/pr-17992-*is gone, andorigin/maincarries the content —git log origin/main --oneline -80has(#17992)1 with control(#17998)1. Card closed by the PR'sFixesline;pm:dispatchedresidue and the assignee stripped in this pass and read back. Contract review of record 5652606716 (head345b15e7, unchanged to landing); 速读 5652606845; ACCEPT 5652608615.references/lanes/director.md,dispatch-runbook.mdanddecision-analysis.mdare free again; the charter chain's references PR still waits on PR #17990 (contract-review.md).
Generated by Claude Code
- added 2 commits that reference this issue
on Sep 17, 2026
Filed by the director seat on the maintainer's word (live PM chat, 2026-09-12T01:4xZ: 「立 domain:skills 卡」). ⛔ The charter lives under
.claude/**, a governed surface (AGENTS.md PD#14): the skills seat authors the change, the maintainer hand-merges it. ⛔ The director seat writes no repo file.Governing text
.claude/skills/pm-dispatch/SKILL.md:756-758— 「长远合理性权重恒 ≥50%:推荐以长远的读数领起,四轴冲突时其余各轴合起来投不翻它。」「权重按缩小而非扩大特例与契约增生读,⛔ 不据它为投机扩张背书。」「权重是推荐规则不是授权规则」.SKILL.md:753— 「分歧推荐序按拉动定向:有实测拉动 ⇒ 荐长远形态一次付清;零拉动 ⇒ 荐不扩散。」SKILL.md创业阶段不扩散 block — 「过渡也从紧 —— 创业阶段不渐进 … staged 选项仅凭具名外部用户证据才可呈报为推荐。」references/core-rules.md:143— 「spec 与代码不一致默认改代码,改协议单独立卡非选项。」;:145— 「推荐须逐轴给理由、长远权重不低于一半;有拉动荐长远终态一次付清,零拉动荐不扩散。」references/decision-analysis.md正文六项 → 推荐项 (current text): 「推荐 + 回退 + 置信缺口:荐一项、给回退项、明说本分析看不见什么。」⇒ The RULE already exists. What is missing is a mechanical step in the writing template that makes a violation visible on the card itself. This card adds that step; it changes no rule.
The failure this closes, measured on decision batch #117 (director seat, 2026-09-12)
SessionResponseto admitnullRoot causes, from the director seat's own account to the maintainer: (1) ① was computed as "which option adds the least surface", which is ④'s question, so ④ effectively carried 75%; (2) when spec and code disagreed the seat asked "which is cheaper to change" instead of applying the fixed direction; (3) the seat inherited the triage seat's recommendation instead of re-deriving; (4) ① was scored without an external reference point (how mature platforms model the capability); (5) "breaking" was treated as a veto, contrary to 「创业阶段不渐进」.
The change
1.
references/decision-analysis.md, 正文六项, the 推荐 item — replace the one line with:2.
references/decision-analysis.md, 四棱卡面块固定形状, the 末尾推荐行 — extend:3.
SKILL.md:756— unchanged (single source of the rule). If the skills seat judges a pointer is needed, one clause: 「自检行见references/decision-analysis.md」. ⛔ No second statement of the rule.4. Applicability — per the file's own 适用面: new records only; existing cards are ⛔ not retroactively edited. The grep-able marker is the literal
只看①选.Acceptance
grep -c '只看①选' .claude/skills/pm-dispatch/references/decision-analysis.md≥ 2 (the 推荐 item and the 四棱 recommendation row).SKILL.md:756-758is byte-identical before and after, or carries only the one pointer clause.Refs
Decision batch #117 (director seat post #12708, ledger 5642585243) · #17238 (5642584682) · #16678 (5642584284) · #17147 (5642584078) ·
SKILL.md升级与决策 ·references/core-rules.md:143-145·references/decision-analysis.mdFiled by the director seat,
session_01QsCVSivtpwT6ZXs5Rtvqxe, 2026-09-12T01:4xZ, with Claude Code.Generated by Claude Code