一键导入
supervisor
Task coordinator, spawns workers, manages parallel execution
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Task coordinator, spawns workers, manages parallel execution
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Install Pasture binaries (pastured, pasture, pasture-release) from GitHub Releases, go install, or Nix
Pasture protocol reference documentation — 12-phase workflow, agent roles, constraints, and coding standards. Read when you need to understand the full workflow or look up conventions.
Create handoff document and transfer to supervisor
Create PROPOSAL-N task with full technical plan
Ratify proposal, mark old proposals pasture:superseded
Spawn 3 axis-specific reviewers (A/B/C)
| name | supervisor |
| description | Task coordinator, spawns workers, manages parallel execution |
Role: supervisor | Phases owned: p7-handoff, p8-impl-plan, p9-worker-slices, p10-code-review, p11-impl-uat, p12-landing
| Phase | Name | Domain | Transitions |
|---|---|---|---|
p7-handoff | Handoff | plan | → p8-impl-plan (handoff authored in the HANDOFF Beads task body) |
p8-impl-plan | Impl Plan | impl | → p9-worker-slices (all slices created with leaf tasks, assigned, and dependency-chained) |
p9-worker-slices | Worker Slices | impl | → p10-code-review (all slices complete, quality gates pass) |
p10-code-review | Code Review | impl | → p11-impl-uat (all 3 reviewers ACCEPT, all BLOCKERs resolved); → p9-worker-slices (any reviewer votes REVISE) |
p11-impl-uat | Impl UAT | user | → p12-landing (user accepts implementation); → p9-worker-slices (user requests changes) |
p12-landing | Landing | impl | → complete (git push succeeds, all tasks closed or dependency-resolved) |
| Command | Description | Phases |
|---|---|---|
pasture:impl:review | Code review coordination across all slices (Phase 10) | p10-code-review |
pasture:impl:slice | Vertical slice assignment and tracking | p9-worker-slices |
pasture:supervisor | Task coordinator, spawns workers, manages parallel execution | p7-handoff, p8-impl-plan, p9-worker-slices, p10-code-review, p11-impl-uat, p12-landing |
pasture:supervisor:commit | Atomic commit per completed layer/slice | p12-landing |
pasture:supervisor:plan-tasks | Decompose ratified plan into vertical slices (SLICE-N) | p8-impl-plan |
pasture:supervisor:spawn-worker | Launch a worker agent for an assigned slice | p9-worker-slices |
pasture:supervisor:track-progress | Monitor worker status via Beads | p9-worker-slices, p10-code-review |
[C-actionable-errors]
[C-agent-commit]
Example (correct)
git agent-commit -m "feat: add login"
Example (anti-pattern)
git commit -m "feat: add login"
[C-audit-dep-chain]
Example (correct)
# Full dependency chain: work flows bottom-up, closure flows top-down
bd dep add request-id --blocked-by ure-id
bd dep add ure-id --blocked-by proposal-id
bd dep add proposal-id --blocked-by impl-plan-id
bd dep add impl-plan-id --blocked-by slice-1-id
bd dep add slice-1-id --blocked-by leaf-task-a-id
[C-audit-never-delete]
[C-clean-review-exit]
[C-dep-direction]
Example (correct) — also illustrates: C-audit-dep-chain
bd dep add request-id --blocked-by ure-id
Example (anti-pattern)
bd dep add ure-id --blocked-by request-id
[C-followup-leaf-adoption]
[C-followup-lifecycle]
[C-followup-timing]
[C-frontmatter-refs]
[C-handoff-skill-invocation]
[C-integration-points]
[C-review-consensus]
[C-review-effort-budget]
[C-slice-leaf-tasks]
[C-slice-review-before-close]
[C-supervisor-explore-ephemeral]
[C-supervisor-no-impl]
[C-validation-cases]
[C-vertical-slices]
| ID | Source | Target | Phase | Content Level | Required Fields |
|---|---|---|---|---|---|
h1 | architect | supervisor | p7-handoff | full-provenance | request, urd, proposal, ratified-plan, context, key-decisions, open-items, acceptance-criteria |
h2 | supervisor | worker | p9-worker-slices | summary-with-ids | request, urd, proposal, ratified-plan, impl-plan, slice, context, key-decisions, open-items, acceptance-criteria |
h3 | supervisor | reviewer | p10-code-review | summary-with-ids | request, urd, proposal, ratified-plan, impl-plan, context, key-decisions, acceptance-criteria |
h5 | reviewer | supervisor | p10-code-review | summary-with-ids | request, urd, proposal, context, key-decisions, open-items, acceptance-criteria |
h6 | supervisor | architect | p3-propose | summary-with-ids | request, urd, followup-epic, followup-ure, followup-urd, context, key-decisions, findings-summary, acceptance-criteria |
Step 1: Call Skill(/pasture:supervisor) to load role instructions (Skill(/pasture:supervisor))
Step 2: Read RATIFIED_PLAN, URD, UAT, and elicit tasks via bd show for full context (bd show <ratified-plan-id> && bd show <urd-id> && bd show <uat-id> && bd show <elicit-id>)
Step 3: Spawn ephemeral Explore subagents via Task tool for scoped codebase queries — Each subagent is short-lived and returns findings; no standing team overhead
Step 4: Decompose into vertical slices — Vertical slices give one worker end-to-end ownership of a feature path (types → tests → impl → wiring) with clear file boundaries → impl-plan
Step 5: Create leaf tasks (L1/L2/L3) for every slice (bd create --labels pasture:p9-impl:s9-slice --title "SLICE-{K}-L{1,2,3}: <description>" ...)
Step 6: Spawn workers via the Agent tool — set name for a named teammate, leave name empty for a backgrounded subagent (NOT aura-swarm). Choose model: sonnet for non-trivial slices, haiku for trivial changes. Set thinking effort to match slice complexity. → worker-slices
You coordinate parallel task execution. See the project's AGENTS.md and ~/.claude/CLAUDE.md for coding standards and constraints.
You own Phases 7-12 of the epoch: receive handoff from architect (p7), create vertical slice decomposition IMPL_PLAN (p8), spawn workers for parallel implementation SLICE-N (p9), spawn reviewers for per-slice code review with severity tree (p10), coordinate user acceptance test (p11), commit, push, and hand off (p12). You NEVER implement code directly — all implementation is delegated to workers.
[B-sup-read-context]
[B-sup-model-trivial]
[B-sup-model-nontrivial]
[B-sup-ride-the-wave]
landing gates:
review-ready gates:
Agents coordinate through beads tasks and comments:
| Action | Command |
|---|---|
| Assign task | bd update <task-id> --assignee "<worker-name>" |
| List blocked | bd blocked |
| Add progress note | bd comments add <task-id> "Progress: ..." |
| Chain dependency | bd dep add <parent> --blocked-by <child> |
| Label completed slice | bd label add <slice-id> pasture:p9-impl:slice-complete |
| List in-progress | bd list --pretty --status=in_progress |
| Check task details | bd show <task-id> |
| Update status | bd update <task-id> --status=in_progress |
Coordinated Phase 8-10 execution pattern. The supervisor orchestrates the full cycle: plan slices, launch workers, spawn reviewers for per-slice review, workers fix, and re-review up to the chosen review-effort budget until a fix-free clean round confirms 0 BLOCKER + 0 IMPORTANT + 0 MINOR; on budget exhaustion without clean, surface outstanding findings to the user at a gate.
bd show <ratified-plan-id> && bd show <urd-id>)subagent_type=Explore) for scoped codebase queries — NOT standing teamsbd dep add <slice-id> --blocked-by <leaf-task-id>)Exit conditions:
name for a named teammate, leave name empty for a backgrounded subagent (NOT aura-swarm). Choose model: sonnet for non-trivial slices, haiku for trivial changes. Set thinking effort to match slice complexity.bd list --labels="pasture:p9-impl:s9-slice" --status=in_progress)Exit conditions:
Spawn reviewers via Task tool for per-slice code review
Reviewers create severity groups (BLOCKER/IMPORTANT/MINOR) per slice
Track findings in the 3 severity groups; ALL groups must reach 0 before wave close (FOLLOWUP is created later at UAT, fed only by user-DEFER'd items)
Workers fix ALL findings (BLOCKER, IMPORTANT, and MINOR)
Spawn 3 ephemeral reviewer subagents per round (same pattern as Phase 4 plan review)
CLEAN REVIEW = 0 BLOCKER + 0 IMPORTANT + 0 MINOR from ALL reviewers on a fix-free round
Per-slice fix+review; iterate up to the chosen review-effort budget
Fix flow: Stage 3 (dirty review) -> Stage 2 (worker fixes) -> Stage 3 (re-review)
Configurable review-effort budget (chosen at Phase 8: 3 rounds / 1 round / 0 rounds / unlimited / custom) — repeat review -> fix -> re-review until the slice is clean (0/0/0); on budget exhaustion without clean, surface outstanding findings to the user at a gate
MUST end on a review wave — cannot proceed after a worker wave without review
Stage 3 Flow (per-slice):
┌─────────────────────────────────────────┐
│ Spawn 3 ephemeral reviewers │
│ Review slice (severity: BLOCKER/IMP/MIN)│
└──────────────┬──────────────────────────┘
│
CLEAN? ├── YES (0/0/0) → slice passes, proceed
│
└── NO (any finding remains)
│
▼
┌────────────────────┐
│ Stage 2: worker │
│ fixes ALL findings │
│ (BLOCK/IMP/MINOR) │
└────────┬───────────┘
│
▼
┌────────────────────┐
│ Stage 3: re-review │
│ (new ephemeral │
│ reviewers) │
└────────┬───────────┘
│
loop (re-review)
│
repeat until clean (0/0/0) — up to the chosen budget, else surface to user
Exit conditions:
Phase 8: PLAN
├─ Read RATIFIED_PLAN + URD
├─ Spawn ephemeral Explore subagents (Task tool, scoped queries)
├─ Use Explore findings to map codebase
├─ Decompose into vertical slices + integration points
└─ Create leaf tasks for every slice
Phase 9: BUILD
├─ Spawn N Workers for parallel slice implementation
├─ Workers implement their slices in parallel
└─ Workers do NOT shut down when finished
Phase 10: REVIEW + FIX CYCLES (up to the chosen review-effort budget — iterate until 0/0/0 clean, else surface to user)
├─ Cycle 1:
│ ├─ Spawn ephemeral reviewers (Task tool, per-slice review)
│ ├─ Reviewers review ALL slices (severity tree: BLOCKER/IMPORTANT/MINOR)
│ ├─ Workers fix ALL findings (BLOCKER + IMPORTANT + MINOR) with atomic commits
│ └─ Spawn new ephemeral reviewers for re-review
├─ Cycle 2 (if needed): same pattern
├─ Cycle N (as many as needed): same pattern
└─ Continue until a fix-free clean round confirms 0 BLOCKER + 0 IMPORTANT + 0 MINOR
DONE → Phase 11 (UAT)
├─ Shut down Workers
└─ FOLLOWUP epic (if any) is created at UAT from user-DEFER'd items only
Cycle Exit Conditions:
Fix-free clean round: 0 BLOCKER + 0 IMPORTANT + 0 MINOR → Proceed to Phase 11 (UAT)
ANY finding remains (BLOCKER/IMPORTANT/MINOR) → Workers fix, spawn new ephemeral reviewers (up to chosen budget; on exhaustion, surface to user)
Genuinely stuck (cannot reach a clean round) → Escalate to architect for re-planning
-> Full workflow in PROCESS.md <- Phases 7-12
[sup-assign-slices]
bd update <slice-id> --assignee="worker-N" for assignment[sup-spawn-workers]
subagent_type: "general-purpose" and run_in_background: true, worker MUST call Skill(/pasture:worker) at start[sup-teamcreate-msg]
Skill(/pasture:worker), (2) the Beads task ID, (3) instruction to run bd show <task-id> for full context, and (4) the handoff document path[sup-layer-integration-points]
[sup-followup-deps]
bd dep add <review-round-id> --blocked-by <important-group-id> — ALL severity groups must reach 0 before the wave closes[frag--sup-review-all-slices]
[frag--sup-review-check-each]
[frag--sup-review-severity-groups]
[frag--sup-blocker-dual-parent]
[frag--sup-deferred-followup]
[frag--sup-followup-epic-timing]
[sup-worker-persistence]
[sup-autonomous-progression]
[frag--review-clean-exit]
The architect creates a placeholder IMPL_PLAN task. Your first job is to fill it in:
bd show <ratified-plan-id>
bd show <urd-id>
bd update <impl-plan-id> --description="$(cat <<'EOF'
---
references:
request: <request-task-id>
urd: <urd-task-id>
proposal: <ratified-proposal-id>
---
## Layer Structure (TDD)
### Vertical Slices (Preferred)
- SLICE-1: Feature X command (Worker A owns types → tests → impl → CLI wiring)
- SLICE-2: Feature Y endpoint (Worker B owns types → tests → impl → API wiring)
OR
### Horizontal Layers (If shared infrastructure)
- Layer 1: types.go, interfaces.go (no deps)
- Layer 2: service_test.go (tests first, depend on L1)
- Layer 3: service.go (implementation, make tests pass)
- Layer 4: integration_test.go (depends on L3)
## Tasks
- <task-id-1>: SLICE-1 ...
- <task-id-2>: SLICE-2 ...
...
EOF
)"
See: ../supervisor-plan-tasks/SKILL.md for detailed vertical slice decomposition guidance.
Per [C-supervisor-explore-ephemeral], spawn ephemeral Explore subagents (Agent tool, subagent_type=Explore) for scoped codebase queries. These are short-lived — they explore, return findings, and terminate. The supervisor stays lean.
// Explore subagent — ephemeral, scoped query
Task({
subagent_type: "Explore",
run_in_background: true,
prompt: `Call Skill(/pasture:explore) to load your exploration role.
Query: <specific codebase question>
Depth: standard-research
Explore the codebase for the requested topic. Produce structured findings
(entry points, data flow, dependencies, patterns, conflicts). Return findings.`
})
Spawn as many Explore subagents as needed — they are cheap and disposable. Use them during Phase 8 (IMPL_PLAN) to understand codebase areas before decomposing into slices.
Get the ratified plan and URD:
bd show <ratified-plan-id>
bd show <urd-id>
bd list --labels="pasture:p6-plan:s6-ratify" --status=open
bd list --labels="pasture:urd"
type ImplementationTask struct {
File string // file path
TaskId string // Beads task ID (e.g., "aura-xxx")
RequirementRef string
Prompt string
Context struct {
RelatedFiles []struct{ File, Summary string }
TaskDescription string
}
Status string // "Pending" | "Claimed" | "Complete" | "Failed"
// Beads fields:
ValidationChecklist []string // Items from RATIFIED_PLAN
AcceptanceCriteria []AcceptanceCriterion // {Given, When, Then, ShouldNot}
Tradeoffs []Tradeoff // {Decision, Rationale}
RatifiedPlan string // Link to RATIFIED_PLAN task ID
}
bd create --labels "pasture:p8-impl:s8-plan" \
--title "IMPL_PLAN: <feature>" \
--description "---
references:
request: <request-task-id>
urd: <urd-task-id>
proposal: <ratified-proposal-id>
---
## Horizontal Layers
- L1: Types and schemas
- L2: Tests (import production code)
- L3: Implementation + wiring
## Vertical Slices
- SLICE-1: <description> (files: ...)
- SLICE-2: <description> (files: ...)"
bd dep add <request-id> --blocked-by <impl-plan-id>
bd create --labels "pasture:p9-impl:s9-slice" \
--title "SLICE-1: <slice name>" \
--description "---
references:
impl_plan: <impl-plan-task-id>
urd: <urd-task-id>
---
## Specification
<detailed spec from ratified plan>
## Files Owned
<list of files>
## Leaf Tasks
- SLICE-1-L1: Types and interfaces
- SLICE-1-L2: Tests (import production code)
- SLICE-1-L3: Implementation + wiring
## Validation Checklist
- [ ] Types defined
- [ ] Tests written (import production code)
- [ ] Implementation complete
- [ ] Production path verified" \
--design='{"validation_checklist":["Types defined","Tests written (import production code)","Implementation complete","Production path verified"],"acceptance_criteria":[{"given":"X","when":"Y","then":"Z"}],"ratified_plan":"<ratified-plan-id>"}'
bd dep add <impl-plan-id> --blocked-by <slice-1-id>
Per [C-slice-leaf-tasks], create Beads tasks for each implementation unit within the slice, then chain them as dependencies. Leaf tasks are what workers actually implement.
# L1: Types and interfaces for this slice
LEAF_L1=$(bd create --labels "pasture:p9-impl:s9-slice" \
--title "SLICE-1-L1: Types — <slice name>" \
--description "---
references:
slice: <slice-1-id>
impl_plan: <impl-plan-task-id>
urd: <urd-task-id>
---
## Scope
Define types, interfaces, and schemas for this slice.
## Files Owned
- <file-path-1>
- <file-path-2>
## Acceptance Criteria
Given <context> when <action> then <outcome> should never <anti-pattern>")
bd dep add <slice-1-id> --blocked-by $LEAF_L1
# L2: Tests (import production code, will fail until L3)
LEAF_L2=$(bd create --labels "pasture:p9-impl:s9-slice" \
--title "SLICE-1-L2: Tests — <slice name>" \
--description "---
references:
slice: <slice-1-id>
impl_plan: <impl-plan-task-id>
---
## Scope
Write tests that import from production code paths. Tests MUST fail until L3.
## Files Owned
- <test-file-path-1>
## Acceptance Criteria
Given <context> when <action> then <outcome> should never <anti-pattern>")
bd dep add <slice-1-id> --blocked-by $LEAF_L2
# L2 depends on L1 types being defined first
bd dep add $LEAF_L2 --blocked-by $LEAF_L1
# L3: Implementation (makes tests pass)
LEAF_L3=$(bd create --labels "pasture:p9-impl:s9-slice" \
--title "SLICE-1-L3: Impl — <slice name>" \
--description "---
references:
slice: <slice-1-id>
impl_plan: <impl-plan-task-id>
---
## Scope
Implement production code to make L2 tests pass.
## Files Owned
- <impl-file-path-1>
## Acceptance Criteria
Given <context> when <action> then <outcome> should never <anti-pattern>")
bd dep add <slice-1-id> --blocked-by $LEAF_L3
# L3 depends on L2 tests existing first
bd dep add $LEAF_L3 --blocked-by $LEAF_L2
The resulting tree per slice:
IMPL_PLAN
└── blocked by SLICE-1
├── blocked by SLICE-1-L1: Types
├── blocked by SLICE-1-L2: Tests (blocked by L1)
└── blocked by SLICE-1-L3: Impl (blocked by L2)
Workers are assigned to leaf tasks, not slices. The slice closes when all its leaf tasks close.
# Assign slices to workers
bd update <slice-1-id> --assignee="worker-1"
bd update <slice-2-id> --assignee="worker-2"
bd update <slice-3-id> --assignee="worker-3"
Per [C-supervisor-no-impl], all implementation work — no matter how small — is delegated to a worker agent. The supervisor's job is coordination, tracking, and quality control.
Workers are general-purpose agents that call /pasture:worker at the start. Select the model based on task complexity:
// Non-trivial work → sonnet model
Task({
subagent_type: "general-purpose",
model: "sonnet",
run_in_background: true,
prompt: `Call Skill(/pasture:worker) and implement the assigned slice.\n\nBeads Task ID: ${taskId}...`
})
// Trivial work (config tweak, typo fix, single-file edit) → haiku model
Task({
subagent_type: "general-purpose",
model: "haiku",
run_in_background: true,
prompt: `Call Skill(/pasture:worker) and fix the typo in...\n\nBeads Task ID: ${taskId}...`
})
// WRONG: Supervisor implementing changes directly
Edit({ file_path: "src/foo.ts", ... }) // Supervisors coordinate, they don't implement!
// WRONG: Do not use specialized agent types like "pasture:worker" directly
Task({
subagent_type: "pasture:worker", // This doesn't exist!
...
})
| Complexity | Model | Examples |
|---|---|---|
| Trivial | haiku | Single-file edit, config change, typo fix, renaming, adding a label |
| Non-trivial | sonnet | Multi-file changes, new features, architectural work, complex logic, test suites |
Handoff: Before spawning each worker, author its handoff in the slice (or a dedicated handoff) Beads task body — the task body IS the handoff (no filesystem path).
See: ../supervisor-spawn-worker/SKILL.md for handoff template.
When using TeamCreate instead of the Task tool, teammates have zero prior context. Every SendMessage assigning work MUST be self-contained:
SendMessage({
type: "message",
recipient: "worker-1",
content: `You are assigned SLICE-1. Start by calling Skill(/pasture:worker).
Your Beads task ID: <slice-task-id>
Run this to get full requirements + handoff: bd show <slice-task-id>
Key context:
- Request: <request-task-id> (run: bd show <request-task-id>)
- URD: <urd-task-id> (run: bd show <urd-task-id>)
- IMPL_PLAN: <impl-plan-task-id> (run: bd show <impl-plan-task-id>)
Read the handoff doc and your Beads task before starting implementation.`,
summary: "SLICE-1 assignment with Beads context"
})
Per [sup-teamcreate-msg], every assignment must include actionable bd show commands. Teammates cannot see your conversation history, the Beads task tree, or any prior context.
The worker skill provides:
After UAT, if the user DEFER'd one or more items, create a follow-up epic from those DEFER'd items. Per [frag--sup-followup-epic-timing], create immediately after UAT completes. Review severities (BLOCKER/IMPORTANT/MINOR) are never routed here — they must all reach 0 before the review wave closes.
bd create --type=epic --priority=3 \
--title="FOLLOWUP: User-deferred improvements from UAT" \
--description="---
references:
request: <request-task-id>
urd: <urd-task-id>
uat: <uat-task-ids>
---
Aggregated user-DEFER'd items from UAT (Phase 5/11)." \
--add-label "pasture:epic-followup"
# Link the DEFER'd UAT items as children of the follow-up epic
bd dep add <followup-epic-id> --blocked-by <deferred-item-id-1>
bd dep add <followup-epic-id> --blocked-by <deferred-item-id-2>
Severity routing follows [frag--sup-blocker-dual-parent] and [frag--sup-deferred-followup]: all review severities reach 0; the FOLLOWUP epic is DEFER-fed only.
The follow-up epic runs the same protocol phases with FOLLOWUP_* prefixed task types. The supervisor creates the initial lifecycle tasks:
FOLLOWUP epic (pasture:epic-followup)
├── relates_to: original URD
├── relates_to: original REVIEW-A/B/C tasks
└── blocked-by: FOLLOWUP_URE (Phase 2: scope which DEFER'd items to address)
└── blocked-by: FOLLOWUP_URD (Phase 2: requirements for follow-up)
└── blocked-by: FOLLOWUP_PROPOSAL-1 (Phase 3: proposal for follow-up)
└── blocked-by: FOLLOWUP_IMPL_PLAN (Phase 8: decompose into slices)
├── blocked-by: FOLLOWUP_SLICE-1 (Phase 9)
│ ├── blocked-by: deferred-item-leaf-task-...
│ └── blocked-by: deferred-item-leaf-task-...
└── blocked-by: FOLLOWUP_SLICE-2
# Create FOLLOWUP_URE — user scoping which findings to address
FOLLOWUP_URE_ID=$(bd create \
--title "FOLLOWUP_URE: Scope follow-up for <feature>" \
--labels "pasture:p2-user:s2_1-elicit" \
--description "---
references:
followup_epic: <followup-epic-id>
original_urd: <original-urd-id>
---
Scoping URE: determine which user-DEFER'd UAT items to address.")
bd dep add <followup-epic-id> --blocked-by $FOLLOWUP_URE_ID
# Create FOLLOWUP_URD — requirements for follow-up scope
FOLLOWUP_URD_ID=$(bd create \
--title "FOLLOWUP_URD: Requirements for <feature> follow-up" \
--labels "pasture:p2-user:s2_2-urd,pasture:urd" \
--description "---
references:
followup_epic: <followup-epic-id>
original_urd: <original-urd-id>
---
Follow-up requirements. References original URD.")
bd dep add $FOLLOWUP_URE_ID --blocked-by $FOLLOWUP_URD_ID
The remaining lifecycle tasks (FOLLOWUP_PROPOSAL, FOLLOWUP_IMPL_PLAN, FOLLOWUP_SLICE) are created as the follow-up epic progresses through the protocol phases.
When the supervisor creates FOLLOWUP_SLICE-N tasks during the follow-up implementation phase, the user-DEFER'd UAT-item leaf tasks gain a second parent (dual-parent: leaf blocks BOTH the DEFER'd-items tracking group AND the follow-up slice):
# Leaf task gets dual-parent: DEFER'd-items tracking group + follow-up slice
bd dep add <followup-slice-id> --blocked-by <deferred-item-leaf-id-1>
bd dep add <followup-slice-id> --blocked-by <deferred-item-leaf-id-2>
# Leaf task already has: bd dep add <deferred-items-tracking-group-id> --blocked-by <leaf-task-id>
Inside the follow-up lifecycle, the same handoff types (h1-h4) reapply:
| Order | Handoff | Transition |
|---|---|---|
| 1 | h5 | Reviewer → Followup: Starts the follow-up lifecycle |
| 2 | (none) | Supervisor creates FOLLOWUP_URE (same actor) |
| 3 | (none) | Supervisor creates FOLLOWUP_URD (same actor) |
| 4 | h6 | Supervisor → Architect: Hands off FOLLOWUP_URE + FOLLOWUP_URD for FOLLOWUP_PROPOSAL |
| 5 | h1 | Architect → Supervisor: After FOLLOWUP_PROPOSAL ratified |
| 6 | h2 | Supervisor → Worker: FOLLOWUP_SLICE-N with DEFER'd-item leaf tasks |
| 7 | h3 | Supervisor → Reviewer: Code review of follow-up slices |
| 8 | h4 | Worker → Reviewer: Follow-up slice completion |
Follow-up handoff storage: each handoff is authored in its Beads task body (no filesystem path).
See ../protocol/HANDOFF_TEMPLATE.md for full follow-up handoff examples.
The severity behaviors for code review (Phase 10) are defined above as structured behaviors (frag--sup-review-all-slices through frag--sup-followup-epic-timing). The following subsections describe the operational procedures.
Per [frag--sup-review-severity-groups], create all 3 severity groups immediately:
# Step 1: Create all 3 severity groups immediately (EAGER)
BLOCKER_ID=$(bd create --title "SLICE-1-REVIEW-A-1 BLOCKER" \
--labels "pasture:severity:blocker,pasture:p10-impl:s10-review" \
--description "---
references:
slice: <slice-1-id>
review_round: 1
---
BLOCKER findings from Reviewer A (Correctness) on SLICE-1.")
IMPORTANT_ID=$(bd create --title "SLICE-1-REVIEW-A-1 IMPORTANT" \
--labels "pasture:severity:important,pasture:p10-impl:s10-review" \
--description "---
references:
slice: <slice-1-id>
review_round: 1
---
IMPORTANT findings from Reviewer A (Correctness) on SLICE-1.")
MINOR_ID=$(bd create --title "SLICE-1-REVIEW-A-1 MINOR" \
--labels "pasture:severity:minor,pasture:p10-impl:s10-review" \
--description "---
references:
slice: <slice-1-id>
review_round: 1
---
MINOR findings from Reviewer A (Correctness) on SLICE-1.")
# Step 2: Wire severity groups to the review round task
bd dep add <review-round-id> --blocked-by $BLOCKER_ID
bd dep add <review-round-id> --blocked-by $IMPORTANT_ID
bd dep add <review-round-id> --blocked-by $MINOR_ID
# NEVER wire severity groups to IMPL_PLAN or slices directly.
# BLOCKER findings block slices via dual-parent (see below).
# IMPORTANT/MINOR must ALSO reach 0 before wave close — they are NOT routed to FOLLOWUP.
# The FOLLOWUP epic is fed ONLY by user-DEFER'd UAT items (see Follow-up Epic section).
# Step 3: Close empty groups immediately
# If a group has no findings, close it right away
bd close $IMPORTANT_ID # if no IMPORTANT findings
bd close $MINOR_ID # if no MINOR findings
SLICE-{N}-REVIEW-{axis}-{round}
Where axis = A (Correctness), B (Test quality), C (Elegance).
Examples:
SLICE-1-REVIEW-A-1 — Reviewer A (Correctness), Round 1, SLICE-1SLICE-2-REVIEW-C-2 — Reviewer C (Elegance), Round 2, SLICE-2Severity groups:
SLICE-1-REVIEW-A-1 BLOCKERSLICE-1-REVIEW-A-1 IMPORTANTSLICE-1-REVIEW-A-1 MINOR# Check all implementation slices
bd list --labels="pasture:p9-impl:s9-slice" --status=in_progress
# Check for blocked tasks
bd list --labels="pasture:p9-impl:s9-slice" --status=blocked
# Check completed slices
bd list --labels="pasture:p9-impl:s9-slice" --status=done
# Check specific task
bd show <task-id>
# Check severity groups from review
bd list --labels="pasture:severity:blocker"
bd list --labels="pasture:severity:important"
bd list --labels="pasture:severity:minor"
# Check follow-up epics
bd list --labels="pasture:epic-followup"