Skip to content

pullboard-run guide says the engine refuses only the builder; engine also refuses any seat under the builder's parent session #20

Open

Description

@bens27

pullboard-run guide says the engine "refuses only the builder"; engine 90 also refuses any seat under the builder's parent session

What the guide says

skills/pullboard-run/SKILL.md:88: "Start every reviewer outside the builder's root: a fresh session, or a subagent of a different session from the one that started the builder. ... Pullboard itself refuses only the builder (SELF_VERIFY), so the rest is yours to keep."

Step 5 of the same guide has the coordinator start verifier subagents from its own session.

What the engine does

src/machine.js:146 guard notBuilder refuses SELF_VERIFY, VERIFIER_STANDING and SELF_SESSION_VERIFY. Its rule text: the verifier's agent session must not have built or submitted the item under any seat.
src/item-authors.js:25 refuses SELF_SESSION_VERIFY when the verifying seat shares a parent session with any author.
src/item-sessions.js:100 refuses when the agent session itself built or submitted.
src/parent-session.js derives Claude Code identity from CLAUDE_CODE_SESSION_ID alone; an Agent-tool subagent has no id of its own, so every builder and verifier the coordinator spawns shares one parent session.

Observed

Board superagent, 2026-11-04. Coordinator (Claude Code) spawned builder implementation-3 and verifier review-2 as subagents. review-2's pullboard verify 33 accept was refused SELF_SESSION_VERIFY. The refusal's next-step ("ask another agent session to verify it: pullboard next --verify from that session's own worktree") does not say that, under Claude Code, "another agent session" means a separate process the person starts; a subagent of the coordinator is still the same session. The verdict landed only after the person started claude -p in a fresh worktree (review-3).

Proposed fix (agreed design)

  1. Generate the guide's independence sentence from the notBuilder row in src/machine.js (its rule and alsoRefuses texts) instead of hand-written prose, with a regression test that fails when the guide and the row diverge.
  2. In the Claude Code refusal path, make the SELF_SESSION_VERIFY next-step say: start the verifier as a separate process (new claude session in its own worktree), not an Agent-tool subagent of the coordinator.
  3. Keep the engine rule as it is; the stricter rule is right, the guide is wrong.

Related: PR #18 (view health scan session fix), same board.

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

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions