بنقرة واحدة
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"