# Phase 3: Task Chain Creation > **COMPACT PROTECTION**: This is an execution document. After context compression, phase instructions become summaries only. You MUST immediately re-read this file via `Read("~/.codex/skills/team-lifecycle/phases/03-task-chain-creation.md")` before continuing. Never execute based on summaries. ## Objective Build the full pipeline task chain based on the selected mode, write all tasks to the state file (`team-session.json`). Each task entry contains its ID, owner agent, dependencies, description, and inline discuss metadata. No agents are spawned in this phase. --- ## Input | Input | Source | Required | |-------|--------|----------| | sessionId | Phase 2 output | Yes | | sessionDir | Phase 2 output | Yes | | state | Phase 2 output (team-session.json) | Yes | | state.mode | Pipeline mode | Yes | | state.scope | Project scope | Yes | | state.spec_path | Spec file path (impl-only) | Conditional | --- ## Execution Steps ### Step 3.1: Mode-to-Pipeline Routing Select the pipeline definition based on mode. | Mode | Pipeline | First Task | Checkpoint | |------|----------|------------|------------| | spec-only | Spec pipeline (6 tasks) | RESEARCH-001 | None | | impl-only | Impl pipeline (4 tasks) | PLAN-001 | None | | fe-only | FE pipeline (3 tasks) | PLAN-001 | None | | fullstack | Fullstack pipeline (6 tasks) | PLAN-001 | None | | full-lifecycle | Spec (6) + Impl (4) | RESEARCH-001 | After QUALITY-001 | | full-lifecycle-fe | Spec (6) + Fullstack (6) | RESEARCH-001 | After QUALITY-001 | ### Step 3.2: Build Task Entries For each task in the selected pipeline, create a task entry object. **Task entry schema**: ```javascript { id: "", owner: "", status: "pending", blocked_by: ["", ...], description: "", inline_discuss: "", agent_id: null, artifact_path: null, discuss_verdict: null, discuss_severity: null, started_at: null, completed_at: null, revision_of: null, revision_count: 0, is_checkpoint_after: false } ``` **Task description template** (every task gets this format): ``` Session: Scope: InlineDiscuss: ``` ### Step 3.3: Spec Pipeline Tasks Used by: spec-only, full-lifecycle, full-lifecycle-fe | # | ID | Owner | BlockedBy | Description | InlineDiscuss | |---|-----|-------|-----------|-------------|---------------| | 1 | RESEARCH-001 | analyst | (none) | Seed analysis and context gathering | DISCUSS-001 | | 2 | DRAFT-001 | writer | RESEARCH-001 | Generate Product Brief | DISCUSS-002 | | 3 | DRAFT-002 | writer | DRAFT-001 | Generate Requirements/PRD | DISCUSS-003 | | 4 | DRAFT-003 | writer | DRAFT-002 | Generate Architecture Document | DISCUSS-004 | | 5 | DRAFT-004 | writer | DRAFT-003 | Generate Epics and Stories | DISCUSS-005 | | 6 | QUALITY-001 | reviewer | DRAFT-004 | 5-dimension spec quality + sign-off | DISCUSS-006 | QUALITY-001 has `is_checkpoint_after: true` for full-lifecycle and full-lifecycle-fe modes (signals orchestrator to pause for user confirmation before impl phase). ### Step 3.4: Impl Pipeline Tasks Used by: impl-only, full-lifecycle (PLAN-001 blockedBy QUALITY-001) | # | ID | Owner | BlockedBy | Description | InlineDiscuss | |---|-----|-------|-----------|-------------|---------------| | 1 | PLAN-001 | planner | (none) | Multi-angle exploration and planning | none | | 2 | IMPL-001 | executor | PLAN-001 | Code implementation | none | | 3 | TEST-001 | tester | IMPL-001 | Test-fix cycles | none | | 4 | REVIEW-001 | reviewer | IMPL-001 | 4-dimension code review | none | For full-lifecycle mode: PLAN-001 `blocked_by` includes `QUALITY-001`. TEST-001 and REVIEW-001 both depend on IMPL-001 and can run in parallel. ### Step 3.5: FE Pipeline Tasks Used by: fe-only | # | ID | Owner | BlockedBy | Description | InlineDiscuss | |---|-----|-------|-----------|-------------|---------------| | 1 | PLAN-001 | planner | (none) | Planning (frontend focus) | none | | 2 | DEV-FE-001 | fe-developer | PLAN-001 | Frontend implementation | none | | 3 | QA-FE-001 | fe-qa | DEV-FE-001 | 5-dimension frontend QA | none | GC loop: if QA-FE-001 verdict is NEEDS_FIX, the orchestrator dynamically creates DEV-FE-002 and QA-FE-002 during Phase 4. These are NOT pre-created here. ### Step 3.6: Fullstack Pipeline Tasks Used by: fullstack, full-lifecycle-fe (PLAN-001 blockedBy QUALITY-001) | # | ID | Owner | BlockedBy | Description | InlineDiscuss | |---|-----|-------|-----------|-------------|---------------| | 1 | PLAN-001 | planner | (none) | Fullstack planning | none | | 2 | IMPL-001 | executor | PLAN-001 | Backend implementation | none | | 3 | DEV-FE-001 | fe-developer | PLAN-001 | Frontend implementation | none | | 4 | TEST-001 | tester | IMPL-001 | Backend test-fix cycles | none | | 5 | QA-FE-001 | fe-qa | DEV-FE-001 | Frontend QA | none | | 6 | REVIEW-001 | reviewer | TEST-001, QA-FE-001 | Full code review | none | IMPL-001 and DEV-FE-001 run in parallel (both depend only on PLAN-001). TEST-001 and QA-FE-001 run in parallel (each depends on its respective impl). REVIEW-001 is a sync barrier -- depends on both TEST-001 and QA-FE-001. For full-lifecycle-fe: PLAN-001 `blocked_by` includes `QUALITY-001`. ### Step 3.7: Composite Mode Assembly For composite modes, concatenate pipelines and adjust cross-pipeline dependencies. **full-lifecycle** = Spec (6) + Impl (4): ``` Spec pipeline tasks (Step 3.3) + Impl pipeline tasks (Step 3.4) with: PLAN-001.blocked_by = ["QUALITY-001"] with: QUALITY-001.is_checkpoint_after = true ``` **full-lifecycle-fe** = Spec (6) + Fullstack (6): ``` Spec pipeline tasks (Step 3.3) + Fullstack pipeline tasks (Step 3.6) with: PLAN-001.blocked_by = ["QUALITY-001"] with: QUALITY-001.is_checkpoint_after = true ``` ### Step 3.8: Impl-Only Pre-Check If mode is `impl-only`, verify specification exists: ``` state.spec_path is set? +- YES -> read spec file -> include path in PLAN-001 description +- NO -> error: "impl-only requires existing spec" ``` Add to PLAN-001 description: `Spec: ` ### Step 3.9: Write Pipeline to State File ```javascript // Read current state const state = JSON.parse(Read("/team-session.json")) // Set pipeline state.pipeline = taskEntries // array of task entry objects from steps above state.tasks_total = taskEntries.length state.updated_at = new Date().toISOString() // Write back Write("/team-session.json", JSON.stringify(state, null, 2)) ``` ### Step 3.10: Validation Before proceeding, validate the constructed pipeline. | Check | Criteria | On Failure | |-------|----------|-----------| | Task count | Matches expected count for mode | Error with mismatch details | | Dependencies | Every blocked_by reference exists as a task ID in the pipeline | Error with dangling reference | | No cycles | Topological sort succeeds (no circular dependencies) | Error with cycle details | | Owner assignment | Each task owner matches a valid agent from Agent Registry | Error with unknown agent | | Unique IDs | No duplicate task IDs | Error with duplicate ID | | Inline discuss | Spec tasks have correct DISCUSS-NNN assignment per round config | Warning if mismatch | | Session reference | Every task description contains `Session: ` | Fix missing references | ### Step 3.11: Output Confirmation ``` [orchestrator] Phase 3: Task chain created Mode: Tasks: Pipeline: () [blocked_by: ] () [blocked_by: ] ... First ready task(s): ``` --- ## Output | Output | Type | Destination | |--------|------|-------------| | state (updated) | Object | Written to team-session.json | | state.pipeline | Array | Task chain with all entries | | Ready task IDs | Array | Tasks with empty blocked_by (passed to Phase 4) | --- ## Success Criteria - Pipeline array written to state file with correct task count - All dependencies are valid (no dangling, no cycles) - Each task has owner, description, blocked_by, inline_discuss - Composite modes have correct cross-pipeline dependencies - Spec tasks have inline discuss metadata - At least one task has empty blocked_by (pipeline can start) --- ## Error Handling | Error | Resolution | |-------|------------| | Unknown mode | Should not happen (Phase 1 validates), fail with supported mode list | | Missing spec for impl-only | Error, suggest spec-only or full-lifecycle | | Dependency cycle detected | Report cycle, halt pipeline creation | | State file read/write error | Report error, suggest re-initialization | | Duplicate task ID | Skip duplicate, log warning | --- ## Next Phase Proceed to [Phase 4: Pipeline Coordination](04-pipeline-coordination.md) with the ready task IDs.