本贴是 skills 座位的唯一权威登记。 座位贴协议:索引 = label:pm:seat(#4604 已作废,2026-08-13)。六段模板(#7583 ):范围 | 当前 PM | 继承台账 | 热文件串行队 | 常设承诺 | 说明 —— 段段现值,⛔ 不写班次叙事。
范围 Both skill roots: .claude/skills/** + skills/**. Routing label domain:skills. (Also .claude/agents/os-dev.md / AGENTS.md instruction-architecture work per the 2026-08-12 approvals — conservative ADR-class treatment.) scripts/pm/** PM-loop tooling also routes here (triage precedent: #7964 , #8068 , #8117 ).
当前 PM ⏳ vacant — 前任 hotlong / session session_018WuTtyckQa1VcXwgd52JpN,任期 2026-08-13 ~14:1xZ → 2026-08-14 ~05:3xZ,注销依据:维护者原话「你可以下班了」。接任指引:/pm-dispatch skills,先读本贴正文(正文即权威现状,更早状态见编辑历史)。前任任期内的车道自理授权(分诊/开卡)是对该会话的授权 ,不随座位贴继承 —— 接任者按默认权限面工作,授权需维护者重新给。
继承台账 (final state at stand-down, 2026-08-14 ~05:3xZ; rounds 1–9 all reviewed: 20 ACCEPTs, 0 REWORK; 18 PRs landed) In flight: 0. Awaiting a human merge: 0. Round 9 terminal outcomes: PR docs(agents,pm-dispatch): bind a gate-union run to a commit — run it after the final commit and quote HEAD #8635 MERGED (维护者「同意合并」评审并亲自 flip;Fixes A green gate union proves nothing about the head it is reported against — nothing ties the run to a commit, so a mid-round union goes stale silently #8550 已关账摘标 —— union-HEAD 绑定契约现已上主干:os-dev.md 时序半边 + review-checklist.md 复核半边)· PR docs(pm-dispatch): search_issues semantic-only + list_issue_types 403 trap rows in platform readings #8636 / PR docs(pm-dispatch): backlog sweep predicate ① is a per-round stock query, never a changed-since frontier #8638 均按维护者裁决关闭未合并 ,对应卡 [finding] GitHub MCP search_issues returns 0 for quoted strings verifiably present in issue bodies — the Blocked-by: reverse index cannot be computed through it #8508 / [finding] A frontier-based backlog sweep never revisits an untouched card — two bare cards sat invisible for ~8 hours across ~8 triage rounds #8561 作废 (not planned;原话见各卡评论,verbatim:「8508 作废,8636 直接关闭」「8561 作废, 8638 关闭」)。Landed this shift (18 PRs) : docs(pm-dispatch): 收班 = 状态 flush + 看护显式移交 — decouple shift-end from in-flight-zero #8453 · os-dev: wait actively on the shared verification lock instead of ending the turn #8464 (→os-dev agents park on the shared verification flock expecting a wake-up that never comes — the active-wait clause belongs in the role file #8448 ) · fix(pm): read YAML block-scalar run: bodies in dispatch-gates discovery #8465 (→[finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for .changeset/ paths — a breaking changeset shipped locally-green and went red only in CI #8410 ) · feat(pm-dispatch): four 2026-08-13 scheduling rulings — pm:blocking cache, computed pull order, urgent fable triage, simple cross-lane takeover #8469 (→pm-dispatch: 调度策略四项(维护者 2026-08-13)—— 被依赖卡提权标签、bug 提权、紧急卡 fable 直接分诊、跨车道简单依赖直接接手 #8433 ) · docs(agents): note that checkout-from-ref stages the index (#8280) #8472 (→[finding] git checkout <ref> -- <path> STAGES the retrieved content — the prescribed reverse-verification workflow can produce a PR that silently reverts its own fix while local tests pass #8280 ) · feat(pm): flag a Part of PR whose body also carries a closing keyword for the same card (#8293) #8475 (H7 detector) · test(pm): run the dispatch-gates self-test in CI and anchor its convention-gate pins #8477 (→[finding] dispatch-gates.mjs has 28 self-test cases and no CI job runs any of them #8162 +[finding] dispatch-gates self-test pins its convention gate names with substring includes, so a prefix-preserving rename passes the pin that exists to catch it #8364 ) · fix(pm): derive dispatch-gates watch hints from the module body, not from comments and self-test fixtures (#8478) #8511 (→[finding] dispatch-gates watch hints are read from self-test fixtures and comments, so gates are printed as MATCHED for paths they never read #8478 ) · feat(ci): block a PR that declares itself only part of a card while also closing it #8527 (→Promote the Part-of/closing-keyword contradiction (H7) into a PR-scoped blocking check — and settle the fenced-code reading first #8476 , live blocking gate) · fix(pm): derive a gate family for a card that edits the gate's own check script (#8509) #8532 (→dispatch-gates never derives a gate for a card that edits the gate's OWN check script — the resolved script paths are already in hand and unused #8509 ) · test(pm): run the half-state sweeper self-test in CI #8544 (→[finding] check-half-states.mjs has a 79-case --self-test that no CI job runs — and a blocking gate now imports its predicate #8528 ) · docs(pm-dispatch): references platform-facts sweep — seven measured reading rules #8490 (→PM gate-reading does not pin the run to the PR's CURRENT head — a cancelled run on a superseded head gets rerun, burning a heavyweight cycle and producing a false red #8434 +[finding] list_issues returns no assignee field, so a lane inventory cannot tell a claimed card from a free one — add to the platform-readings trap table #8374 +[finding] GitHub MCP issue_read returns HTML-entity-escaped bodies (' / "), so a body round-trip (read → edit → write) from an MCP-backed seat risks corrupting the original text #8272 +finding: a dev session is invisible across GitHub accounts, so archive_session / probe / poke are all unavailable to a successor seat — the hand-off checklist asks for something the successor cannot do #8187 ) · docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 (→pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451 , fable quota exemption) · docs(pm-dispatch): findings pipeline — hold verdicts swap to pm:on-hold, first-touch grading every round, auto-concentrated rounds, lane-evidence protocol, atomic ruling-recording #8602 (→pm-dispatch: the findings pipeline is structurally under-drained — switch the metric to UNGRADED count, add first-touch grading, auto-concentrated rounds, and codify the lane-evidence protocol #8449 , findings pipeline) · fix(pm): declare the type-check ledger's root-program coupling so dispatch-gates can derive it (#8551) #8603 · fix(pm): name the ratchet invocation CI runs in dispatch-gates' test-file entry #8611 (rider [finding] check-dispatch-gates.mjs's header still says hint extraction "does not skip comments" — maskComments retired that a while ago, and the header is the authority a future author reads #8604 ) · docs(agents,pm-dispatch): bind a gate-union run to a commit — run it after the final commit and quote HEAD #8635 (→A green gate union proves nothing about the head it is reported against — nothing ties the run to a commit, so a mid-round union goes stale silently #8550 , union-HEAD binding)。[finding] Part of #N does not prevent auto-close — a half-delivered card was closed on merge with no closing keyword anywhere, and only a post-merge inventory caught it #8293 & [finding] Three mechanizable items from a 16-hour spec-lane shift: os-dev's background-wait stall (6 instances), the verify-lock convention devs invented, and enable_pr_auto_merge's silent no-op #8294 closed with completion records; labels cleaned throughout.Queue (1) : [finding] Batch independence is tested by file surface, but cross-lane cards couple semantically — one card's pins can encode a fact about another card's predicate #8281 (SKILL.md claim 段姊妹读耦合;fable-mandatory;严格零净行 —— SKILL.md 链现已空闲,可径直派)。Holds (2) : [finding] dispatch-gates hintCovers matches on a raw STRING prefix, not a path-segment boundary — a hint naming one package can claim a sibling that merely shares its name prefix #8534 (hintCovers prefix boundary — dormant by measurement;three named restart triggers on-card)· [finding] platform-readings sibling row still routes unlock scans through a search qualifier — channel-ambiguous now that MCP search_issues is measured semantic-only #8637 (unlock-scan hint channel ambiguity — 前提行随 [finding] GitHub MCP search_issues returns 0 for quoted strings verifiably present in issue bodies — the Blocked-by: reverse index cannot be computed through it #8508 作废而消失;re-graded to hold,three named restart triggers on-card)。Findings: ungraded 1 — [finding] the fable-mandatory tier is recalled at claim time, not derived — a mandatory-surface card shipped at opus because the claim comment misclassified its file surface #8640 (model tier recalled-not-derived at claim time;由前任在注销时落卡,待首触分诊)。[finding] GitHub MCP list_issue_types returns 403 for this integration while issue_write sets native types fine — a seat that probes the list first will wrongly conclude typing is unavailable #8574 仍为 open finding:其交付车 PR docs(pm-dispatch): search_issues semantic-only + list_issue_types 403 trap rows in platform readings #8636 被关闭,裁决只点名了姊妹卡;是否连带作废已在交班报告问维护者,无答复则按普通 finding 分诊。Decision box (2) : ① os-zhuang 身份一字确认(是 ⇒ 闭案;否 ⇒ incident report;四笔操作清单见前任轮次报告)。② [finding] GitHub MCP list_issue_types returns 403 for this integration while issue_write sets native types fine — a seat that probes the list first will wrongly conclude typing is unavailable #8574 作废是否连带(见上)。Incident record (closed) : model-tier breach on A green gate union proves nothing about the head it is reported against — nothing ties the run to a commit, so a mid-round union goes stale silently #8550 — 前任 claim 误判文件面、以 opus 派发 fable 强制面;dev 在 PR 正文指出,前任在 PR docs(agents,pm-dispatch): bind a gate-union run to a commit — run it after the final commit and quote HEAD #8635 复核中公开认账并以 fable 档补偿复核后判决;机制观察已落 [finding] the fable-mandatory tier is recalled at claim time, not derived — a mandatory-surface card shipped at opus because the claim comment misclassified its file surface #8640 。热文件串行队 常设承诺 专题讨论 channel with the maintainer; every skills change gets the three-axis reasonableness analysis before dispatch and at review.Skills PRs are ADR-class — draft + review only; ⛔ never merge/queue/auto-merge; maintainer lands by hand (or gives per-PR explicit authorization which the seat executes with a verbatim audit comment); round reports carry one "awaiting a human merge" line each.claude-fable-5 mandatory for pm-dispatch-edit (references included) and spec-contract-semantic cards; quota exemption codified on main (PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 , 「8451 同意」): floor opus, downgrade + reason in the claim comment. ⚠️ 判定文件面是否命中强制根时对着 globs 核对,⛔ 不凭记忆 —— 见 [finding] the fable-mandatory tier is recalled at claim time, not derived — a mandatory-surface card shipped at opus because the claim comment misclassified its file surface #8640 与上方 incident record。First-touch grading every round per the findings pipeline on main(⚠️ 分诊/开卡授权本身须维护者对接任会话重新授予,见 当前 PM 段)。 说明 Founding rulings (maintainer, 2026-08-11, verbatim, untranslated):
我认为所有的 skills 任务应该单独一个项目经理负责,专题和我讨论。
所有 skills 的更新和 adr 类似,需要人工审核
所有现有 skills 相关卡片转到 新的项目经理
现在 的 项目经理skills 太长了,需要考虑怎么压缩
2026-08-13 : four dispatch-strategy rulings (PR #8469 ) · fable exemption 「8451 同意」 · Part-of auto-close mechanism established — detector + live blocking gate + author-rule all landed · watch-hint precision (1144→473) + identity derivation (70/70) + both pm self-test suites CI-wired.
2026-08-14 : findings pipeline live on main (metric = ungraded count, first-touch grading, auto-concentrated >15, lane-evidence protocol, pm:on-hold) · union-HEAD binding contract live on main (PR #8635 , maintainer-authorized merge) · sweep stock-query rewrite 与 MCP trap rows 由维护者作废未落地 (测量记录保留在 #8561 / #8508 卡上;若后续要重提,从卡上取数、开新卡,⛔ 不复用已作废卡)。
平台实测(本班沉淀;已落表的在 references,未落表的仅存卡上) : auto-merge echo unreliable both directions · session handles account-scoped · list_issues no assignees · issue_read bodies entity-escaped · MCP search_issues semantic-only / zero hits never evidence(记录仅存 #8508 卡,未落表 —— 作废裁决 )· MCP list_issue_types 403 while issue_write type: works(仅存 #8574 卡,同上 )· closing-keyword parser boundaries(same-line, no gerunds, no code spans; fences NOT firing)· closing links form at PR-open time · actions/setup-node@v5 package-manager-cache shells to pnpm during setup · send_later delivery latency ~10 min。
Seat timers: none. 前任全部定时器已删除或已 fire 自灭;PR 订阅全部解除。
Prior body revisions carry the founding stock-transfer table and earlier round states (edit history is the archive, per #7583 ).
本贴是 skills 座位的唯一权威登记。 座位贴协议:索引 =
label:pm:seat(#4604 已作废,2026-08-13)。六段模板(#7583):范围 | 当前 PM | 继承台账 | 热文件串行队 | 常设承诺 | 说明 —— 段段现值,⛔ 不写班次叙事。范围
Both skill roots:
.claude/skills/**+skills/**. Routing labeldomain:skills. (Also.claude/agents/os-dev.md/AGENTS.mdinstruction-architecture work per the 2026-08-12 approvals — conservative ADR-class treatment.)scripts/pm/**PM-loop tooling also routes here (triage precedent: #7964, #8068, #8117).当前 PM
⏳ vacant — 前任
hotlong/ sessionsession_018WuTtyckQa1VcXwgd52JpN,任期 2026-08-13 ~14:1xZ → 2026-08-14 ~05:3xZ,注销依据:维护者原话「你可以下班了」。接任指引:/pm-dispatch skills,先读本贴正文(正文即权威现状,更早状态见编辑历史)。前任任期内的车道自理授权(分诊/开卡)是对该会话的授权,不随座位贴继承 —— 接任者按默认权限面工作,授权需维护者重新给。继承台账 (final state at stand-down, 2026-08-14 ~05:3xZ; rounds 1–9 all reviewed: 20 ACCEPTs, 0 REWORK; 18 PRs landed)
search_issuesreturns 0 for quoted strings verifiably present in issue bodies — theBlocked-by:reverse index cannot be computed through it #8508 / [finding] A frontier-based backlog sweep never revisits an untouched card — two bare cards sat invisible for ~8 hours across ~8 triage rounds #8561 作废(not planned;原话见各卡评论,verbatim:「8508 作废,8636 直接关闭」「8561 作废, 8638 关闭」)。.changeset/paths — a breaking changeset shipped locally-green and went red only in CI #8410) · feat(pm-dispatch): four 2026-08-13 scheduling rulings — pm:blocking cache, computed pull order, urgent fable triage, simple cross-lane takeover #8469(→pm-dispatch: 调度策略四项(维护者 2026-08-13)—— 被依赖卡提权标签、bug 提权、紧急卡 fable 直接分诊、跨车道简单依赖直接接手 #8433) · docs(agents): note that checkout-from-ref stages the index (#8280) #8472(→[finding]git checkout <ref> -- <path>STAGES the retrieved content — the prescribed reverse-verification workflow can produce a PR that silently reverts its own fix while local tests pass #8280) · feat(pm): flag aPart ofPR whose body also carries a closing keyword for the same card (#8293) #8475(H7 detector) · test(pm): run the dispatch-gates self-test in CI and anchor its convention-gate pins #8477(→[finding]dispatch-gates.mjshas 28 self-test cases and no CI job runs any of them #8162+[finding] dispatch-gates self-test pins its convention gate names with substringincludes, so a prefix-preserving rename passes the pin that exists to catch it #8364) · fix(pm): derive dispatch-gates watch hints from the module body, not from comments and self-test fixtures (#8478) #8511(→[finding] dispatch-gates watch hints are read from self-test fixtures and comments, so gates are printed as MATCHED for paths they never read #8478) · feat(ci): block a PR that declares itself only part of a card while also closing it #8527(→Promote the Part-of/closing-keyword contradiction (H7) into a PR-scoped blocking check — and settle the fenced-code reading first #8476, live blocking gate) · fix(pm): derive a gate family for a card that edits the gate's own check script (#8509) #8532(→dispatch-gates never derives a gate for a card that edits the gate's OWN check script — the resolved script paths are already in hand and unused #8509) · test(pm): run the half-state sweeper self-test in CI #8544(→[finding]check-half-states.mjshas a 79-case--self-testthat no CI job runs — and a blocking gate now imports its predicate #8528) · docs(pm-dispatch): references platform-facts sweep — seven measured reading rules #8490(→PM gate-reading does not pin the run to the PR's CURRENT head — acancelledrun on a superseded head gets rerun, burning a heavyweight cycle and producing a false red #8434+[finding]list_issuesreturns no assignee field, so a lane inventory cannot tell a claimed card from a free one — add to the platform-readings trap table #8374+[finding] GitHub MCPissue_readreturns HTML-entity-escaped bodies ('/"), so a body round-trip (read → edit → write) from an MCP-backed seat risks corrupting the original text #8272+finding: a dev session is invisible across GitHub accounts, soarchive_session/ probe / poke are all unavailable to a successor seat — the hand-off checklist asks for something the successor cannot do #8187) · docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492(→pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451, fable quota exemption) · docs(pm-dispatch): findings pipeline — hold verdicts swap to pm:on-hold, first-touch grading every round, auto-concentrated rounds, lane-evidence protocol, atomic ruling-recording #8602(→pm-dispatch: the findings pipeline is structurally under-drained — switch the metric to UNGRADED count, add first-touch grading, auto-concentrated rounds, and codify the lane-evidence protocol #8449, findings pipeline) · fix(pm): declare the type-check ledger's root-program coupling so dispatch-gates can derive it (#8551) #8603 · fix(pm): name the ratchet invocation CI runs in dispatch-gates' test-file entry #8611(rider [finding] check-dispatch-gates.mjs's header still says hint extraction "does not skip comments" — maskComments retired that a while ago, and the header is the authority a future author reads #8604) · docs(agents,pm-dispatch): bind a gate-union run to a commit — run it after the final commit and quote HEAD #8635(→A green gate union proves nothing about the head it is reported against — nothing ties the run to a commit, so a mid-round union goes stale silently #8550, union-HEAD binding)。[finding]Part of #Ndoes not prevent auto-close — a half-delivered card was closed on merge with no closing keyword anywhere, and only a post-merge inventory caught it #8293 & [finding] Three mechanizable items from a 16-hour spec-lane shift: os-dev's background-wait stall (6 instances), the verify-lock convention devs invented, and enable_pr_auto_merge's silent no-op #8294 closed with completion records; labels cleaned throughout.hintCoversmatches on a raw STRING prefix, not a path-segment boundary — a hint naming one package can claim a sibling that merely shares its name prefix #8534(hintCoversprefix boundary — dormant by measurement;three named restart triggers on-card)· [finding] platform-readings sibling row still routes unlock scans through a search qualifier — channel-ambiguous now that MCPsearch_issuesis measured semantic-only #8637(unlock-scan hint channel ambiguity — 前提行随 [finding] GitHub MCPsearch_issuesreturns 0 for quoted strings verifiably present in issue bodies — theBlocked-by:reverse index cannot be computed through it #8508 作废而消失;re-graded to hold,three named restart triggers on-card)。list_issue_typesreturns 403 for this integration whileissue_writesets native types fine — a seat that probes the list first will wrongly conclude typing is unavailable #8574 仍为 openfinding:其交付车 PR docs(pm-dispatch): search_issues semantic-only + list_issue_types 403 trap rows in platform readings #8636 被关闭,裁决只点名了姊妹卡;是否连带作废已在交班报告问维护者,无答复则按普通 finding 分诊。list_issue_typesreturns 403 for this integration whileissue_writesets native types fine — a seat that probes the list first will wrongly conclude typing is unavailable #8574 作废是否连带(见上)。热文件串行队
.claude/skills/pm-dispatch/SKILL.md(686/686, headroom 0):空闲 → [finding] Batch independence is tested by file surface, but cross-lane cards couple semantically — one card's pins can encode a fact about another card's predicate #8281(零净行硬约束)。references/**(全部)·.claude/agents/os-dev.md·scripts/pm/**·AGENTS.md·lint.yml·ensure-pm-labels.sh:全部空闲。常设承诺
claude-fable-5mandatory for pm-dispatch-edit (references included) and spec-contract-semantic cards; quota exemption codified on main (PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492, 「8451 同意」): flooropus, downgrade + reason in the claim comment.说明
Founding rulings (maintainer, 2026-08-11, verbatim, untranslated):
2026-08-13: four dispatch-strategy rulings (PR #8469) · fable exemption 「8451 同意」 · Part-of auto-close mechanism established — detector + live blocking gate + author-rule all landed · watch-hint precision (1144→473) + identity derivation (70/70) + both pm self-test suites CI-wired.
2026-08-14: findings pipeline live on main (metric = ungraded count, first-touch grading, auto-concentrated >15, lane-evidence protocol,
pm:on-hold) · union-HEAD binding contract live on main (PR #8635, maintainer-authorized merge) · sweep stock-query rewrite 与 MCP trap rows 由维护者作废未落地(测量记录保留在 #8561 / #8508 卡上;若后续要重提,从卡上取数、开新卡,⛔ 不复用已作废卡)。平台实测(本班沉淀;已落表的在 references,未落表的仅存卡上): auto-merge echo unreliable both directions · session handles account-scoped ·
list_issuesno assignees ·issue_readbodies entity-escaped · MCPsearch_issuessemantic-only / zero hits never evidence(记录仅存 #8508 卡,未落表 —— 作废裁决)· MCPlist_issue_types403 whileissue_write type:works(仅存 #8574 卡,同上)· closing-keyword parser boundaries(same-line, no gerunds, no code spans; fences NOT firing)· closing links form at PR-open time ·actions/setup-node@v5package-manager-cache shells to pnpm during setup · send_later delivery latency ~10 min。Seat timers: none. 前任全部定时器已删除或已 fire 自灭;PR 订阅全部解除。
Prior body revisions carry the founding stock-transfer table and earlier round states (edit history is the archive, per #7583).