本贴是 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
🟢 hotlong — session session_018WuTtyckQa1VcXwgd52JpN, took over 2026-08-13 ~14:1xZ via /pm-dispatch skills. Live maintainer grants this shift (verbatim, untranslated): 「集中处理skills车道中的所有任务,包括分诊和集中开卡你都可以处理。」+ 「对于 skills 的改动,你需要综合分析是否合理」.
继承台账 (live state, 2026-08-13 ~19:0xZ; rounds 1–6 all reviewed: 14 ACCEPTs, 0 REWORK, 12 PRs landed)
In flight: 0. Standby posture; everything remaining is gated on the two human merges below.
Awaiting a human merge (2) : PR docs(pm-dispatch): references platform-facts sweep — seven measured reading rules #8490 (Fixes 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 — references facts sweep, 7 deliverables) · PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 (Fixes pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451 — fable quota exemption; SKILL.md 686/686 headroom 0). Both reviewed ACCEPT.
Landed this shift (12 PRs) : 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, Part of [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 ) · 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 , the 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 ) · plus docs(pm-dispatch): 收班 = 状态 flush + 看护显式移交 — decouple shift-end from in-flight-zero #8453 at the takeover boundary. All labels cleaned.
Serialized, undispatched : on docs(pm-dispatch): references platform-facts sweep — seven measured reading rules #8490 's merge → close [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 & [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 by hand (split records), confirm member closes, strip pm-dispatch references: platform-facts sweep — five measured deliverables across four member cards #8455 labels, dispatch [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 (fable, S — search_issues trap row + runbook note, rebase on landed rows). On docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 's merge → dispatch 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 (fable; 发现分诊轮+落卡节 + the two amendment comments; strictly net-zero-or-negative lines , headroom 0; ⛔ Model tiering untouched) → then [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 (tail).
Holds (1) : [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).
Watch note : 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 was reopened by this seat after a provenance-less close by a sibling account while its delivering PR is unmerged; if re-closed WITH provenance, accept; if re-closed without, report to the maintainer rather than re-reopen.
Findings: ungraded 0. Decision box: 0.
热文件串行队
常设承诺
专题讨论 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; round reports carry one "awaiting a human merge" line each.
claude-fable-5 mandatory for pm-dispatch-edit and spec-contract-semantic cards; quota exemption (「8451 同意」, both clauses; codified in PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 pending merge): floor opus, downgrade + reason in the claim comment.
Lane-local grading + card-filing authority this shift (grants quoted in 当前 PM).
说明
Founding rulings (maintainer, 2026-08-11, verbatim, untranslated):
我认为所有的 skills 任务应该单独一个项目经理负责,专题和我讨论。
所有 skills 的更新和 adr 类似,需要人工审核
所有现有 skills 相关卡片转到 新的项目经理
现在 的 项目经理skills 太长了,需要考虑怎么压缩
2026-08-13 this shift : four dispatch-strategy rulings landed (PR #8469 merged) · fable exemption 「8451 同意」 (PR #8492 pending) · Part-of auto-close mechanism established (keyword parser reading warning prose; sidebar refuted) — detector + live blocking gate + author-rule all landed except the sweep's rule text · watch-hint precision (1144→473) + identity derivation (70/70) + block-scalar discovery + both pm self-test suites CI-wired.
平台实测(本班沉淀,均已落表或在 #8490 待合) : auto-merge echo unreliable both directions · session handles account-scoped · list_issues no assignees · issue_read bodies entity-escaped · search_issues exact-string zero-hits invalid (#8508 pending) · closing-keyword parser boundaries (same-line, no gerunds, no code spans; fences measured 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 : standby patrol trig_01QUz9fBSKkufNqyatgmHcBH (fires 19:48Z, idempotent criteria). All earlier one-shots fired and self-disabled.
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
🟢 hotlong — session
session_018WuTtyckQa1VcXwgd52JpN, took over 2026-08-13 ~14:1xZ via/pm-dispatch skills. Live maintainer grants this shift (verbatim, untranslated): 「集中处理skills车道中的所有任务,包括分诊和集中开卡你都可以处理。」+ 「对于 skills 的改动,你需要综合分析是否合理」.继承台账 (live state, 2026-08-13 ~19:0xZ; rounds 1–6 all reviewed: 14 ACCEPTs, 0 REWORK, 12 PRs landed)
cancelledrun 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 — references facts sweep, 7 deliverables) · PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 (Fixes pm-dispatch: fable 强制条款需要额度耗尽豁免 —— 「fable 如果用完了,可以用 opus」(维护者 2026-08-13) #8451 — fable quota exemption; SKILL.md 686/686 headroom 0). Both reviewed ACCEPT..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, Part of [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) · 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, the 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) · plus docs(pm-dispatch): 收班 = 状态 flush + 看护显式移交 — decouple shift-end from in-flight-zero #8453 at the takeover boundary. All labels cleaned.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 by hand (split records), confirm member closes, strip pm-dispatch references: platform-facts sweep — five measured deliverables across four member cards #8455 labels, dispatch [finding] GitHub MCPsearch_issuesreturns 0 for quoted strings verifiably present in issue bodies — theBlocked-by:reverse index cannot be computed through it #8508 (fable, S — search_issues trap row + runbook note, rebase on landed rows). On docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492's merge → dispatch 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 (fable; 发现分诊轮+落卡节 + the two amendment comments; strictly net-zero-or-negative lines, headroom 0; ⛔ Model tiering untouched) → then [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 (tail).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).archive_session/ probe / poke are all unavailable to a successor seat — the hand-off checklist asks for something the successor cannot do #8187 was reopened by this seat after a provenance-less close by a sibling account while its delivering PR is unmerged; if re-closed WITH provenance, accept; if re-closed without, report to the maintainer rather than re-reopen.热文件串行队
.claude/skills/pm-dispatch/SKILL.md(686/686, headroom 0): PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 持有(等人工合并)→ 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(零净行硬约束)→ [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/**(五文件): PR docs(pm-dispatch): references platform-facts sweep — seven measured reading rules #8490 持有(等人工合并)→ [finding] GitHub MCPsearch_issuesreturns 0 for quoted strings verifiably present in issue bodies — theBlocked-by:reverse index cannot be computed through it #8508。scripts/pm/dispatch-gates.mjs/check-half-states.mjs/check-dispatch-gates.mjs/check-partof-closing-keyword.mjs/lint.yml/AGENTS.md/os-dev.md/ensure-pm-labels.sh: 全部空闲(本班 12 PR 均已落地)。常设承诺
claude-fable-5mandatory for pm-dispatch-edit and spec-contract-semantic cards; quota exemption (「8451 同意」, both clauses; codified in PR docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 pending merge): flooropus, downgrade + reason in the claim comment.说明
Founding rulings (maintainer, 2026-08-11, verbatim, untranslated):
2026-08-13 this shift: four dispatch-strategy rulings landed (PR #8469 merged) · fable exemption 「8451 同意」 (PR #8492 pending) · Part-of auto-close mechanism established (keyword parser reading warning prose; sidebar refuted) — detector + live blocking gate + author-rule all landed except the sweep's rule text · watch-hint precision (1144→473) + identity derivation (70/70) + block-scalar discovery + both pm self-test suites CI-wired.
平台实测(本班沉淀,均已落表或在 #8490 待合): auto-merge echo unreliable both directions · session handles account-scoped ·
list_issuesno assignees ·issue_readbodies entity-escaped ·search_issuesexact-string zero-hits invalid (#8508 pending) · closing-keyword parser boundaries (same-line, no gerunds, no code spans; fences measured 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: standby patrol
trig_01QUz9fBSKkufNqyatgmHcBH(fires 19:48Z, idempotent criteria). All earlier one-shots fired and self-disabled.Prior body revisions carry the founding stock-transfer table and earlier round states (edit history is the archive, per #7583).