Repository navigation
pm-dispatch SKILL: cloud-card comms is event-driven by ruling — roster limitation on record, notes-21 verify-before-toggle amendment, PR subscription as a hard step #7755
Description
Activity
Claim: PM loop round 2 (spec lane — maintainer-directed skill-update card, filed and dispatched on instruction 「立卡」)
Session:session_01JY2Q5Xto1u8YHADgrZDTnk
Branch:claude/issue-7755-pm-skill-event-driven-comms
Worktree: cloud dev session (own container)
Domain: (none —.claude/internal PM tooling; maintainer-directed, provenance in the body)
File surface:.claude/skills/pm-dispatch/SKILL.md(three scoped edits per the body) + rider evaluation ofclaude/pm-dispatch-spec-5ls2tr@bbe056b. Nothing outside.claude/skills/pm-dispatch/. Stop on breach; explain in the report.
Container & model: skill-update card,mode:cloud,model: claude-fable-5(Model tiering mandatory clause — no downward discretion)
Serial constraints cleared: no open PR touches.claude/skills/pm-dispatch/**(checked 13:07Z; #7552 from another seat touches the SKILL but is a different section — the dev must re-verify overlap against that PR's diff at start and declare regions if both are still open).
Landing: draft PR held for HUMAN merge per #7548 — ⛔ no auto-merge, no queue.
Generated by Claude Code
Dispatch withdrawn; card held — on the maintainer's instruction.
- Whose instruction: the maintainer, spec-lane PM session chat, 2026-08-11 ~13:03Z.
- Verbatim: 「7755 只要立卡,不要处理」
- Execution state: the cloud dev session dispatched at 13:02Z was interrupted and archived ~1 minute in — zero push, zero PR, zero code (verified
git ls-remote). Claim released (assignee removed,pm:dispatchedoff). - State:
pm:on-hold— decision made, deliberately deferred. Restart condition: the maintainer says to process this card (the filing itself was also maintainer-directed, same chat: 「立卡」). Until then: ⛔ no dispatch, no nagging; the card stays as the durable record of the three validated deltas + process constraints (fable model mandatory clause, pm-dispatch SKILL: skills updates are ADR-class — human review/merge required (maintainer ruling 2026-08-11) #7548 human-merge).
Generated by Claude Code
Restart condition met — card returns to the dispatchable queue, sequenced behind #7754.
- Whose instruction: the maintainer, skills-seat PM session chat (
session_01XoWxhuq3WNNaZUTs6kWdk8), 2026-08-11 ~13:3xZ. - Verbatim: 「7754 处理完继续 7755」
- The hold recorded above (「只要立卡,不要处理」) is thereby lifted by its own restart condition. Label note for auditability: the hold comment declared
pm:on-holdbut the label on the card remainedpm:queue(half-state); with the restart now recorded,pm:queueis the correct current state — no label surgery performed. - Sequencing (same-file serial, no exception): pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754 is a whole-file compression of SKILL.md — including the exact sections this card amends (note 21, the
mode:cloudbackend section, 入队与落地 B). This card dispatches only after pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754's PR lands (human merge per pm-dispatch SKILL: skills updates are ADR-class — human review/merge required (maintainer ruling 2026-08-11) #7548). Dispatching earlier would target pre-compression text and guarantee rework. - Known trap for the future dispatch (recorded now, per step-3 discipline): this card's body describes PRE-compression locations. After pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754, the three targets may have moved (note 21's narrative possibly into a references file); the dev must locate them semantically on the post-compression text, and the rider commit
bbe056b's 6-line paragraph must be re-evaluated against the compressed text as well.
Generated by Claude Code
- Whose instruction: the maintainer, skills-seat PM session chat (
Claim: PM loop round 2 (skills seat)
Session:session_01XoWxhuq3WNNaZUTs6kWdk8
Branch:claude/issue-7755-pm-skill-event-driven-comms
Worktree: cloud session — its own container and clone
Domain:domain:skills
File surface:.claude/skills/pm-dispatch/SKILL.md(three scoped edits per the body, targets re-located on post-#7766 compressed text) +.claude/skills/pm-dispatch/references/**(offset moves, see ratchet note) + rider evaluation ofclaude/pm-dispatch-spec-5ls2tr@bbe056b. Stop on breach; explain in the report.
Container & model: M skill-update card,mode:cloud,model: claude-fable-5(mandatory clause — no downward discretion)
Serial constraints cleared: predecessor #7754/PR #7766 MERGED 14:38Z (hot-file queue position 1 cleared); zero open PRs touch either skills root (searched 14:4xZ, incl. #7552 — no longer open); premise re-verified on post-mergeorigin/main: SKILL.md = 2568 lines, all three target sections locatable, rider commitbbe056bexists.⚠️ Ratchet headroom is 0 (ceiling 2568 = current count) — additions must be offset in-PR; carried into the dispatch prompt.
Restart provenance: hold lifted by maintainer instruction 「7754 处理完继续 7755」 (recorded above, 13:3xZ).
Generated by Claude Code
Dispatched (PM loop round 2, skills seat): cloud dev session
session_01MJrrkG5usF1W3mX6RLyxNA,model: claude-fable-5, created 2026-08-11 14:41Z, outcome branchclaude/issue-7755-pm-skill-event-driven-comms. Dispatch prompt carries: post-#7766 semantic relocation (targets confirmed locatable), ratchet headroom 0 offset discipline (⛔ no silent ceiling raise), notes-21 amend-in-place, riderbbe056bfold-or-record, ADR-class terminal (draft PR, human merge). Collection: os-dev-report comment here + draft PR; PM subscribes once the PR exists.
Generated by Claude Code
{ "issue": 7755, "session": "session_01MJrrkG5usF1W3mX6RLyxNA", "branch": "claude/issue-7755-pm-skill-event-driven-comms", "pr": 7794, "pr_state": "draft (held for human merge per #7548 — no auto-merge, no queue entry)", "premise_still_valid": true, "premise_verification": "Verified on origin/main @ 2701e95 (post-#7766): SKILL.md exactly 2568 lines = MAX_LINES (headroom 0); all three targets semantically locatable on compressed text (note 21 at former L403, mode:cloud backend section, 入队与落地 B); rider commit bbe056b exists on origin/claude/pm-dispatch-spec-5ls2tr (6 insertions, its content absent from main). Serial constraint re-verified at dispatch time: zero open PRs touching .claude/skills/pm-dispatch/** (#7552 closed).", "summary": "Three deltas landed per the card, relocated semantically on post-#7766 text. (1) mode:cloud backend: new 跨会话消息面 paragraph after 监控与转向 — CCR cloud sessions do not register in the cross-session messaging roster; event-driven architecture ruled the standing solution; roster re-tests and local-machine migration closed. (2) Note 21 amended in place, old prescription REPLACED not paralleled: numbered sequence ①-④ — verify queue branch first (~20-30s allowance), branch present means done with no toggle, absent-plus-churn means ONE toggle then re-verify by notes 1 timeline criteria, and the hard rule that no disable is ever issued between an enable and its queue verification (out-of-order webhook trap, #7655 negative / #7657 positive); the settled-membership disable clause (#7446/#7506) retained as step ④. (3) Subscription elevated to numbered hard step: 实测三课 became 实测四课, lesson 4 = subscribe the cloud card's draft PR the moment it exists, with the #7672 vs #7655/#7657 A/B; the 随行纪律 bullet kept as pointer; the B-section report-time boundary bullet rewired to note non-conflict post-#6644 L2.", "rider_bbe056b": "adopted_with_adaptation — still applicable (batch sweep, never-archive-before-merge #7265/#7325, unarchive caveat all absent from post-#7766 main). Folded into the EXISTING B-section archival bullet instead of a standalone mode:cloud paragraph: post-#7766 the archival rule's single home is 入队与落地 B and the 随行纪律 bullet already points there, so a second paragraph would have been the competing-entry shape the card forbids. Rider's 6-line original preserved verbatim in references §「云卡归档欠账与 dirty 自救实测」 with provenance.", "ratchet": "net 0 — SKILL.md lands at exactly 2568 lines (= MAX_LINES, untouched). Gross additions (~+30) fully offset inside touched paragraphs per the #7766 convention: five append-only sections added to references/incidents.md tail (#7655 撤单实测, roster 限制实测, 订阅 A/B 实测, #6072 感知通道缺口, 归档欠账与 dirty 自救 incl. rider text), each with a 出处 line; plus reflow of the narrow-wrapped paragraphs already under edit (mode:subagent/mode:cloud English paras, 监控与转向, flip paragraph). No ceiling raise needed, so the no-silent-raise clause was never triggered.", "file_surface": [".claude/skills/pm-dispatch/SKILL.md", ".claude/skills/pm-dispatch/references/incidents.md"], "file_surface_breach": "none", "changeset": "none — .claude/-only; expect skip-changeset at acceptance", "gates": { "check:pm-skill-ratchet": "pass (2568/2568, headroom 0)", "check:skill-frame-sync": "pass (4 copies isomorphic)", "check:doc-authoring": "pass (375 files clean)", "check:nul-bytes": "pass", "lint check:doc-formula-expressions": "pass (lint dependency closure built first)", "section_pointer_check": "pass — every §「…」 cite in SKILL.md resolves to a real header in references/*.md", "pr_ci": "in_progress — just opened; PM owns CI convergence readouts per dispatch" }, "open_questions": [ "None blocking. Two adaptations on record rather than questions: (a) rider placement in the B-section archival bullet instead of bbe056b's original mode:cloud location — reasoning above, both outcomes governed by #7548 either way; (b) line-budget offsets include pure reflow of paragraphs already under edit, which adds whitespace-only diff hunks in those paragraphs — accepted as the cost of net-0 at headroom 0." ] }
Generated by Claude Code
Review: ACCEPT — PR #7794 (ADR-class terminal state: awaiting a human merge)
Verified against GitHub, not the report's claims:
- PR shape: draft ✓, base
main✓, first lineFixes #7755only (noPart of #7631— correct, per the dispatch clause) ✓. - File surface (
get_files): exactly 2 —SKILL.md(+79/−79, net zero) andreferences/incidents.md(+70). Ratchet config untouched, as promised. - Delta review on the diff itself: (1) notes 21 amended in place — the old "absent ⇒ toggle" prescription is replaced (not paralleled) by the ①–④ sequence with the hard rule ⛔ never a disable between an enable and its queue verification; notes-1 criteria and the
max_entries_to_buildcaveat preserved verbatim. Consistency bonus: this seat independently ran the exact corrected sequence on PR pm-dispatch SKILL structural compression: 3050 → 2568 lines, narratives moved verbatim to references (#7631 PR₂) #7766 today (empty-field enable → queue-branch positive hit, no toggle) — the amendment matches measured behavior. (2) Roster-limitation paragraph landed with the ruling quotes and a references pointer. (3) Subscription elevated to Dispatch-backends lesson 4 (实测三课 → 四课) with the fix(spec): lower equality triples with a $field comparand to {$eq: ref} (#7597) #7672 vs spec: re-type TenantPlan / sys_environment.plan as an opaque plan identifier #7655/feat(spec): rule and enforce submitBehavior.url — relative-only, declared-field interpolation, URL-escaped (#7496) #7657 A/B; boundary bullet correctly notes birth-subscription no longer crosses the pre-report boundary post-[skill] pm-dispatch: 5 lessons from the domain:metadata seat's first term (8 cards MERGED / 0 rework / 4 dev-side falsifications) #6644 L2. - Rider
bbe056b: adopted-with-adaptation into the existing B-section archival bullet (single home, avoids the competing-entry shape); 6-line original preserved verbatim in references with provenance. Adaptation reasoning is sound — accepted. - Ratchet at headroom 0: SKILL.md lands at exactly 2568 = MAX_LINES; all five new references sections carry 出处 lines; §-pointer resolution check reported zero missing.
- CI: all 20 checks completed; ESLint and TypeScript Type Check conclusions = success. The single red (Check Changeset) was the expected
.claude/-only shape —skip-changesetapplied (read back, survived) and the job re-run (queued). - Minor, no action: the report JSON deviates from the canonical contract fields (
status/testsfolded intopr_state/gates) — content is complete, noted for the record only.
Terminal state per #7548: this PR stays draft and visibly hanging — the maintainer reviews and merges by hand (own human account preferred, or say so in seat chat when using the shared one). #7765 (next in the SKILL.md hot-file queue) dispatches only after this lands.
Generated by Claude Code
- PR shape: draft ✓, base
- added a commit that references this issue
on Aug 17, 2026
Filed by the spec-lane PM seat (session
session_01JY2Q5Xto1u8YHADgrZDTnk) on the maintainer's instruction (spec-lane PM session chat, 2026-08-11 ~13:05Z, verbatim: 「立卡」), executing the same-chat rulings: 「当前事件驱动架构即长期方案」/「云卡通信课题就此收档 … 不再追」/ 「没有计划 把 PM 席迁到常驻本地机」.Three validated deltas to
.claude/skills/pm-dispatch/SKILL.md, all proven on the 2026-08-11 spec-lane shift. Scope is exactly these three plus one rider evaluation — not the seat post's broader suggestion list (that stays for 换班复盘).1.
mode:cloud— record the cross-session-messaging conclusion as a known platform limitationAdd a short paragraph to the
mode:cloudbackend section so no future PM session re-investigates this path:ListAgentsdoes not list them andSendMessageby session ID returns not-reachable. Measured 2026-08-11 with the gates that the docs name all passing (Claude Code 2.1.227 ≥ 2.1.224; none of the four feature-flag-disabling env vars set; in-process subagents listed and messageable in the same reads). Per the official doc (code.claude.com/docs/en/cross-session-messaging), cloud sessions appear only when the sending session has "cloud access: a claude.ai login on the first-party Anthropic API" — a condition CCR-container credentials do not currently satisfy.subscribe_pr_activitywebhooks + the dual-drop report contract (issue comment + return message) + criteria-only timers. ⛔ Do not re-test the roster path or propose local-machine migration; both were examined and closed 2026-08-11.2. Operational note 21 amendment — after an empty-field enable, verify queue membership BEFORE any disable
Note 21's current prescription is "disable/enable 翻转一次" on the empty-field signature. The 2026-08-11 shift measured a failure mode inside that prescription: GitHub's "added to merge queue" webhook can arrive OUT OF ORDER, after the first empty-field enable has actually enqueued the PR — and a disable fired into that arming window CANCELS the real enqueue (PR #7655: enable → empty-field → disable → out-of-order "added to queue" notice → queue branch gone; cost one extra toggle lap). The corrected sequence, which landed PR #7657 with zero friction the same day:
enable_pr_auto_mergereturns the empty-field form (method: , enabled at) ⇒ verify by queue branch first (git ls-remote --heads origin 'refs/heads/gh-readonly-queue/*', allow ~20–30s for the entry);Wording should amend note 21 in place (it is the same signature and the same tool), not add a competing note elsewhere.
3. 入队与落地 B — elevate the cloud-card PR subscription from 随行纪律 to a hard dispatch-flow step
The clause 「云卡创建即对其 PR 挂
subscribe_pr_activity」 exists today as one of three 随行纪律 bullets in the sizing section. The 2026-08-11 shift produced a clean A/B measurement of skipping it: #7672 (no subscription — merge discovered by polling, minutes late) vs #7655/#7657 (subscribed — CI failure and merge notices delivered in seconds, the whole relay ran event-driven with zero polling). Move/duplicate the requirement into themode:clouddelivery-contract flow as a numbered step: "the moment the cloud card's draft PR exists,subscribe_pr_activityit — a cloud-card PR without a subscription is a polling liability", keeping the existing bullet as the pointer.Rider evaluation (same PR if adopted)
The previous shift left a compressed 6-line replacement for the closed PR #7431 (cloud-card archival paragraph) on branch
claude/pm-dispatch-spec-5ls2tr@bbe056b, not reopened per the closed-PR rule. The dev on this card should read that commit and either fold the 6-line paragraph into this PR (if it still matches the current SKILL text) or record why it no longer applies. #7548 governs either way.Process constraints (standing rulings — restated, not new)
model: claude-fable-5— the Model tiering mandatory clause for any card touching.claude/skills/pm-dispatch/**(maintainer 2026-08-10, [batch] PM-skill optimization: maintainer-accepted 9-point plan, consolidated with #5925 item 7 + #6644 L2 + #7055 + #7156 #7341).Refs: #7341 (tiering rulings), #7548 (skills-update governance), #7431 (closed predecessor), seat post #6017 (shift evidence ledger).