Skip to content

skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728

Description

@claude

Filed by the skills seat (session session_01MCLBsUgfykL74aU716rzVK, GitHub os-sales) at 2026-09-12T00:47Z from the maintainer's question in this seat's chat (2026-09-12T00:3xZ), which quoted a stalled PM seat's own diagnosis. Provenance, verbatim and untranslated:

项目经理:为什么停下来 —— 直接的答案
因为我在上一轮结束时漏挂了唤醒定时器。 没有别的原因:不是等你、不是被阻塞、不是限流。座位协议要求「走之前重新挂唤醒」,前面每一轮我都挂了,最后那轮没挂。没有下一次 fire,循环就停在那儿了。
现在 00:17Z,我最后一次动作在昨天约 17:00Z —— 空转约 7 小时。
这种应该怎么解决

The shape

The protocol arms the next wake-up as a ONE-SHOT at the round's end (SKILL.md 〈入口与角色〉: 「自设定时器只定下一次唤醒」, 「定时器默认在轮末挂、延时 ≤55 分钟」) and separately makes the re-arm the first action of every patrol (〈收集〉 ①: 「定时器重挂是每次巡检的第一动作,先挂后查,链条对中断免疫」). A chain of one-shots has no memory: one skipped link is silence until a human notices. The chain is immune to an interrupted round only if the arm happened BEFORE the work — the two lines point in different directions, and the seat that stalled followed the first.

Measured cost: one seat idle ~7 h (last own output ~2026-09-11T17:00Z, noticed 2026-09-12T00:17Z) with its queue and its in-flight items untouched; nothing on the board said so, because a 🟢 title and a missing timer look identical from GitHub.

Direction (seat reading; veto window in the round report)

  1. At seating, the seat creates ONE self-bound recurring Routine (create_trigger with a cron, firing into the same session, initiation: own_followup) and records its id in the seat post's Notes; the fired text follows the timer-text discipline (re-read state first, key criteria only). The round-end send_later becomes an optional accelerator (≤55 min while anything is in flight), never the only wake-up.
  2. Sign-off checklist item 6 already says list_triggers + clean up every timer — the recurring Routine is deleted there; the dead-session case is already ruled in platform-readings.md 〈断粮〉: a bound session that dies orphans its Routine ⇒ delete and recreate from the new session.
  3. Cadence is unchanged: standby already patrols every 60–70 min, and a self-bound Routine keeps the session's prompt-cache chain (the readings table records self-binding as a performance optimisation, zero-cost to delete and recreate).
  4. ⛔ Not a mechanical patrol row: Routines are account-scoped and the patrol runner cannot read another account's, so the guard is the Routine itself, not a check.

Landing: SKILL.md 〈入口与角色〉 (the two timer lines fold into one stating the seating-time Routine + the optional round-end one-shot) and 〈收集〉 ① (the first-action re-arm becomes «confirm the Routine is enabled; re-arm the accelerator»), the matching core-rules line; both files at their ceilings ⇒ paid by density (the fold IS the payment). Governed ⇒ human terminal; clause-① file ⇒ contract-review tier build. Hot-file: the SKILL.md chain, after #17389#17490#17497#17569.

Acceptance

  • SKILL.md states the seating-time self-bound Routine as the default wake-up and the round-end one-shot as optional; the sign-off list deletes it; check:skill-frame-sync, check:pm-skill-ratchet, check:pm-skill-id-lint green.
  • A seat following the text and skipping one round-end re-arm still wakes within one Routine period (the property the incident lacked).

Dedup

MCP search_issues (repo-scoped, natural-language query on the missed-re-arm / idle-seat shape) → 0; same-session control query (the narrowing-instruction shape) → 3 hits, so the channel was live and the zero is a reading. git grep -n '定时器' origin/main -- .claude/skills/pm-dispatch/SKILL.md finds the two lines quoted above and no seating-time Routine rule (lit control: Routine hits the 〈断粮〉 section).

domain:skills · pm:queue · priority:p2 · Task (self-triaged at filing under the lane's standing exception).


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions