to-tasks
To Tasks
Turn one approved PRD into an executable queue. Each slice is small enough for one focused implementation run and has a checkable acceptance contract.
Boundary
Receive .ai-workflow/work/<feature-slug>/prd.md with status approved. Draft .ai-workflow/work/<feature-slug>/tasks-draft.md, get task approval, then publish one file named T<N>-<slug>.md per slice under .ai-workflow/work/<feature-slug>/tasks/ with status ready-for-agent.
Read shared/references/workflow-stage-routing.md before drafting. For each slice, call design-gate once for initial routing, then record its lenses_run, required_changes, and verdict in the Slice Contract. If it returns revise, ask only the lens with the blocking finding to recheck the fix. A nonempty decision_required result returns to the user before approval. A published slice has verdict: proceed and decision_required: none. Call security-gate to record security: deep|standard. Use test-lens only when the slice has a real test design decision, such as an integration boundary, mock boundary, concurrency case, or brittle existing test.
Do not call individual design lenses directly, a panel, a runner, or models-consensus. A decision_required result or an unanswered material requirement returns to the user before task approval. If the user explicitly wants extra opinions, direct them to invoke models-consensus; its own workflow presents the proposed seats for user approval before it runs.
Task approval confirms the queue only. It does not approve implementation, external actions, or the build and review model and effort plan. implement-tasks presents that plan after the user invokes it.
Work
-
Confirm that the PRD status is
approved. A draft or bare plan returns toto-prd. Read the relevant code and identify the repository commands that can verify each slice. Never invent a command. -
Draft vertical slices. Each slice provides one observable path through the needed layers. Prefer a tracer bullet that can be verified on its own. Keep a behavior-preserving prefactor first only when it removes a shared blocker, and record its characterization test or the existing suite that supplies the net. For a codebase-wide mechanical change, use expand, migrate, and contract slices instead of pretending it is vertical.