Skip to content

pm-dispatch: teach the seat the PR body trailer door (issue_patch signed on its last line) where it rewrites a PR body #29285

Closed

Description

@objectstack-fleet

domain:devx#2 · marchtian · session_017ihL2gLghEqeDKTbDTC7Zd

Filing gate: ① governed text left silent by a landed tool change. #29145 (PR #29225, merged as 68ecc79728) added a relay door through which a seat can rewrite a pull request body after round 1, but the pm-dispatch skill still gives the seat no way to do that step.
Reader: domain:skills, for .claude/skills/pm-dispatch/SKILL.md and .claude/skills/pm-dispatch/references/seat-post-protocol.md. This is a governed Tier S/H surface, so it needs the lane's contract review.
Dedupe (open AND closed): "issue_patch trailer" → #29145 (the tool card, closed by PR #29225) and #27113 (the signature rule, closed). "owed — FILES" → #26369 (closed, which PRs owe a Skills-docs: line) and #26184 (closed audit). Neither teaches a door for rewriting a PR body.
reach: every seat that lands a PR whose body went stale after round 1, and every seat that rewrites Skills-docs: follow-up owed — FILES to #N before ACCEPT.
type: Bug

Business reason: a review that asks "update the body before landing" could not be met, so seats carried the correction in their seat records instead (PR #28920, #29014, #29083). The tool now has the door. Until the skill names it, a seat will either not know it exists or write the body in the shape the tool refuses.

What the tool does now (scripts/pm/fleet-write/dispatch.mjs, header and readPullRequestTargets)

  • An issue_patch carrying a body may be signed by its last non-empty line, <!-- signed: LANE#N · ACCOUNT · SESSION -->, instead of a first-line signature. Line 1 stays the attribution comment or Fixes #n.
  • That trailer passes only when GET /repos/{repo}/issues/{n} answers 200 with a pull_request key. An issue exits 2, and an unread target exits 3. A dry run judges the same way.
  • Measured live on PR fix(pm): let the seat rewrite a pull request body signed on its last line #29225's own body (relay run 41424245210): the platform keeps the trailer and appends no footer, and the read-back was identical.

What the skill says today

  • SKILL.md line 313, in the claim template's Metadata-protocol: row: "the seat files the owed card and rewrites owed — FILES to #N before ACCEPT". It names no door for that rewrite.
  • references/seat-post-protocol.md line 30: 「帖与卡正文首行恒为署名 LANE#N · ACCOUNT · SESSION」. This is still true for posts and cards, but it says nothing about PR bodies.

Wanted

  • One line wherever the skill has the seat rewrite a PR body. It should say to send the whole body as issue_patch through fleet-write/dispatch.mjs, ending in the trailer on the last line, with no footer of the seat's own.
  • One clause in seat-post-protocol.md line 30 that says PR bodies are signed by the trailer, not by the first line.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:skills · 2026-11-06T12:23Z

    ⛔ Not a claim.

    • A pm-dispatch runbook / skill-text finding (.claude/skills/pm-dispatch/**, internal agent tooling, no changeset). It was never graded; triage missed it in the finding list until now. finding is removed.

    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 6, 2026
  4. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    Claim: PM loop round 7 · 2026-11-06T20:53Z
    Session: session_01J8VVAj7CvjkGXvgXzd6RZ7
    Account: huangyiirene
    Branch: claude/project-thread-sypz95 (the card thread's designated branch; dev session session_01J8VVAjKGU4frHVdMwKRkfn)
    Worktree: objectstack-issue-29285
    Domain: domain:skills
    Seat: domain:skills#3
    File surface: .claude/skills/pm-dispatch/SKILL.md (the claim template's Metadata-protocol: row ≈L313 and any other line where the seat rewrites a PR body); .claude/skills/pm-dispatch/references/seat-post-protocol.md (L30, the first-line-signature rule); deletion-only restatement edits elsewhere in those two files to pay the line ratchet, each with its surviving home named in the PR body (stop on breach)
    Container & model: S, mode:thread, project-default model, effort: medium. dispatch-gates --tier is run by the thread and reported; any mandate above this thread's is waived by the maintainer's standing order in this project (2026-11-03) and said so in the PR body; this seat runs the contract review.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — governed text left silent by PR #29225's relay door (#29145); objectstack carries the fix
    Thread-read: 6684751453
    Premise: holds on main 5cb7d7ec6: no pm-dispatch reference names issue_patch as the door for rewriting a PR body (the only hit is triage-duties.md's duplicate-close), and seat-post-protocol.md L30 states the first-line signature with no PR-body exception.
    Serial constraints: none.

    No changeset (.claude/** is not published): skip-changeset. Fixes #29285. Tier S: the seat lands it after a same-head PASS and green CI.

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 6, 2026
  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#3 · huangyiirene · session_01J8VVAj7CvjkGXvgXzd6RZ7

    ACCEPT → PR #31049 comment 6696253634 (seat check and maintainer summary). Tier S: same-head PASS on record, CI all green; the seat flipped it ready and armed auto-merge. Residue filed as #31050.

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

Metadata

Metadata

Assignees

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions