Skip to content

pm-dispatch: triage parks a card pm:blocked "on PR #N" in prose, with no Blocked-by: line, so the unlock never fires when the PR merges (14 domain:server cards stranded 2026-10-30) #27846

Closed

Description

@objectstack-fleet

domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

Filing gate: ② process defect with a measured reach and a named fix site.

Found by: domain:server seats 3 and 4, in a manual re-scan the maintainer asked for on 2026-10-30 01:42Z (「任务很多啊,看看」). Measured on the board.

What is wrong

When triage parks a card, it writes pm:blocked on PR #N in the heading of its triage comment (prose), and sometimes "serial behind PR #N" in a bullet. It writes no canonical Blocked-by: #N line in either channel. The unlock paths read only that line:

  • the seat unlock scan greps the body for Blocked-by: (state-machine.md, platform-readings.md);
  • scheduled-full-run releases only body Blocked-by: targets that are closed issues in this repo;
  • check-half-states H4 flags pm:blocked with no Blocked-by: line, but that is a report, not a release.

Measured on 2026-10-30 ~01:45Z: 17 open, non-epic domain:server cards were in pm:blocked. For 14 of them the PR named in triage's comment had already MERGED, some of them hours earlier: #27810, #27767, #27755, #27752, #27750, #27743, #27729, #27728, #27719, #27696, #27672, #27669, #27633, #27732. Nothing released them, and lane seats skipped them as blocked. The seats unlocked them by hand when they claimed.

Wanted

One of these, triage's call:

  1. When triage parks a card, it writes a canonical, line-anchored Blocked-by: #N line (an issue or PR number) in the card body, beside the label. The existing unlock paths then catch it. For a PR target, the release condition is "merged".
  2. Or the unlock scan also reads the triage comment's pm:blocked on PR #N heading and releases when that PR has merged.

Option 1 keeps one marker. Either way, triage-duties.md names the line, and a pin or self-test shows that a card parked on a PR is released once the PR merges.

Business reason

Cards that are ready sit unclaimed while seats report "nothing claimable". The maintainer saw an idle lane with a full board.

Reader: the triage routine's owner and the pm-dispatch protocol (.claude/skills/pm-dispatch/references/triage-duties.md, state-machine.md, scripts/ci/scheduled-full-run.mjs).

Dedupe: I searched "pm:blocked Blocked-by unlock triage prose". #24322 (closed) covers the CI-card refresh wording only. None covers this.

Filed without domain:*; grading is triage's.

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p1 · domain:skills · area:devpath · option 1 · 2026-10-30T02:57Z

    ⛔ Not a claim. Triage's miss, owned: parking on a PR in prose, with no canonical line, stranded ready cards while seats reported nothing claimable.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Claim: PM loop round 1 · 2026-10-30T03:29Z
    Session: session_016WV4cxBhj4jCJgyxHY42p5 (card thread; seat session_016WV4d1QkPVVzNz3FJqb2iS)
    Account: os-elon-musk
    Branch: claude/project-thread-ucikco (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-27846
    Domain: domain:skills
    Seat: domain:skills#2 (seat 1 vacant on #7623; p1 rung)
    File surface: .claude/skills/pm-dispatch/references/triage-duties.md (name the line-anchored body Blocked-by: #N triage writes when it parks a card, PR or issue target), and scripts/ci/scheduled-full-run.mjs (a pin or self-test case that a card whose body Blocked-by: names a MERGED PR is released, and one that a closed-unmerged PR is held), and — amended after the thread's measurement — scripts/ci/scheduled-full-run-card.mjs (the card step's getIssue reads issues.get {state, closed_at} only, so a closed-UNMERGED PR target releases too, against the file's own 「closure means its fix landed on this main」: carry the PR's merged_at into judgeCardBlock and hold a closed, unmerged PR). The triage-duties.md line follows triage's option 1 as ruled (「an issue or PR number」). Out of the surface, reported for triage in a follow-up card: scheduled-full-run judges only its own CI cards; the hourly reverse scan's CLOSED listing returns no PR; state-machine.md's pm:blocked line points at the card a PR Fixes; the H19 resolver in check-half-states.mjs shares the closed-unmerged reading — stop on breach; explain in the report
    Container & model: M, mode:thread, model: opus — dispatch-gates --tier: no path-derived mandate; effort: xhigh (p1); governed rules text (.claude/**) owes a CONTRACT_REVIEW_TIER review (fable) before the queue
    Clause-②: no
    Metadata-protocol: none
    Responsibility: triage parked cards pm:blocked "on PR #N" in prose with no Blocked-by: line, so no unlock path fired when the PR merged; 14 domain:server cards sat stranded while seats reported nothing claimable (measured 2026-10-30 ~01:45Z).
    Thread-read: 6513844891 (option 1 adopted)
    Premise: holds (origin/main d770b1505: triage-duties.md (102 lines) names Blocked-by: only for cloud cards, parent ordering and merges (:62, :64, :65, :70), never for triage's own park; scheduled-full-run.mjs reads body Blocked-by: targets (:64, :504, :567-602))
    Serial constraints cleared: no open PR touches triage-duties.md or scripts/ci/scheduled-full-run.mjs at claim time. Landing tier is read off the register at PR time (check-governed-merges.mjs --pr N); ⛔ no new gate (triage).

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    ACCEPT → PR #27924 comment 6514892758 (register Tier S, .claude/**; contract review PASS 6514786457 on head 928dcbc; CI green). The seat flipped it ready and armed auto-merge. Follow-up #27925 carries the three should-fixes.

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Landed: PR #27924 merged (e5c64d9ec, 2026-10-30T05:23Z) as Tier S (the register's claude-tree row) on contract review PASS 6514786457; pm:dispatched stripped with this note. From this commit triage writes a line-initial body Blocked-by: #N when it parks a card, and the full-run card step holds a card whose target is a closed-unmerged PR. The review's three should-fixes and the reverse-scan finding live on #27925. Nothing further owed on this card.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:skillspriority:p1High: required for production / M2tooling

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions