--- skill: status-progression description: Navigate status workflows with user's config. Use when asked "What's next?", "Can I move to X?", or "Why did this fail?". Delegates to get_next_status tool, interprets StatusValidator errors, explains forward/backward/emergency patterns. Lightweight coordinator - validates nothing, explains everything. --- # Status Progression Skill **Role:** Workflow interpreter and guide. Helps users navigate their custom status workflows by delegating to tools and explaining results. **Complementary Architecture:** - **get_next_status tool** - Reads config, analyzes state, recommends next status (read-only) - **StatusValidator** - Validates transitions at write-time, enforces rules, checks prerequisites (write-time) - **This Skill** - Interprets recommendations and errors, explains user's config rules (guidance) ## When to Use This Skill **Activate for:** - "What status comes next?" - "Can I move to testing/completed/etc?" - "Why did my status change fail?" - "Am I ready to complete this?" - "What's my workflow?" - "How do backward transitions work?" ## Core Responsibilities 1. **Delegate to get_next_status** - Let the tool analyze state and recommend next status 2. **Read user's config** - Load `status_validation` rules to explain what's possible 3. **Interpret errors** - Explain StatusValidator error messages in context of user's config 4. **Guide transitions** - Explain forward, backward, and emergency movements ## Tools Available - `Read` - Load `.taskorchestrator/config.yaml` (status_validation section only) - `get_next_status` - Intelligent status recommendations (delegates to MCP tool) - `query_workflow_state` - Complete workflow state with cascade events (**NEW**) - `query_container` - Check entity state (status, tags) when interpreting errors **Critical:** This skill does NOT validate transitions. StatusValidator handles that automatically at write-time. This skill interprets results and explains user's workflow rules. ## Workflow Patterns: Forward, Backward, and Emergency ### Pattern 1: Forward Progression (Happy Path) **When:** Moving through normal workflow sequence **Example:** ```javascript // User asks: "What's next?" recommendation = get_next_status(containerId="task-uuid", containerType="task") // Guide user: "You're at: in-progress Next step: testing Your bug_fix_flow: pending → in-progress → testing → completed StatusValidator will verify prerequisites when you transition." ``` **Why forward?** Normal progression toward completion. ### Pattern 2: Backward Movement (Rework/Iteration) **When:** Need to fix issues, iterate on work, or respond to changes **Example:** ```javascript // User asks: "Can I move back to in-progress from in-review?" config = Read(".taskorchestrator/config.yaml") if (config.status_validation.allow_backward == true) { "✅ Yes! Your config allows backward movement. in-review → in-progress (backward to implement changes) Why: Code review requested changes, found a bug, requirements changed Then re-submit: in-progress → in-review" } ``` **Why backward?** Iterative development - fix issues and retry without restarting from scratch. **For detailed review iteration patterns:** Read `./config-reference.md` ### Pattern 3: Emergency Transitions (Blockers/Cancellations) **When:** Unexpected blockers, priority changes, or cancellations **Example:** ```javascript // User asks: "Task is blocked by external API, what do I do?" config = Read(".taskorchestrator/config.yaml") emergencyStatuses = config.status_progression.tasks.emergency_transitions // Returns: [blocked, on-hold, cancelled, deferred] "✅ Use emergency transition to: blocked in-progress → blocked (emergency - can happen from any state) Why emergency transitions exist: - blocked: External dependency or technical issue - on-hold: Priority shift, paused temporarily - cancelled: Task no longer needed - deferred: Postponed indefinitely" ``` **Why emergency?** Real-world interruptions don't follow linear workflows. ## Quick Action Patterns ### Action 1: What's Next? **User:** "What status comes next?" **Workflow:** ```javascript // Delegate to tool recommendation = get_next_status(containerId="task-uuid", containerType="task") ``` **Response:** ``` Next: testing Your position: in-progress [YOU ARE HERE] Flow: pending → in-progress → testing → completed Using: bug_fix_flow (matched your tags: [bug, backend]) To transition: manage_container(operation="setStatus", containerType="task", id="...", status="testing") ``` ### Action 2: Try Transition (Let StatusValidator Check) **User:** "Can I mark this complete?" **Workflow:** ```javascript // Don't manually validate - delegate to get_next_status recommendation = get_next_status(containerId="task-uuid", containerType="task") // Guide user to try it "get_next_status recommends: completed Try it! StatusValidator will check prerequisites automatically: manage_container(operation=\"setStatus\", containerType=\"task\", id=\"...\", status=\"completed\") If prerequisites aren't met, StatusValidator will explain what's missing. I'll help interpret any errors." ``` **Key:** Let StatusValidator do validation. This skill interprets results. ### Action 3: Interpret StatusValidator Error **User gets error:** "Cannot skip statuses. Must transition through: in-progress" **Workflow:** ```javascript // Read user's config to explain the rule config = Read(".taskorchestrator/config.yaml") "StatusValidator blocked this because YOUR config has: enforce_sequential: true You tried: pending → testing (skipped in-progress) Your options: 1. Follow sequential flow: pending → in-progress → testing 2. Change your config: Set enforce_sequential: false in config.yaml Recommended next step: manage_container(operation=\"setStatus\", containerType=\"task\", id=\"...\", status=\"in-progress\")" ``` **For detailed error interpretation patterns:** Read `./validation-errors.md` ### Action 4: Check Complete Workflow State (NEW) **User asks:** "Show me everything about this task's workflow" **Workflow:** ```javascript // Get comprehensive workflow state workflowState = query_workflow_state( containerType="task", id="task-uuid" ) // Explain complete state "📊 Workflow State: Current: ${workflowState.currentStatus} Active Flow: ${workflowState.activeFlow} ✅ Allowed Next Steps: ${workflowState.allowedTransitions.map(s => ` → ${s}`).join('\n')} ⚠️ Cascade Events Detected: ${workflowState.detectedEvents.map(e => ` • ${e.event}: ${e.reason}`).join('\n')} 📋 Prerequisites for Each Transition: ${Object.entries(workflowState.prerequisites).map(([status, prereq]) => ` ${status}: ${prereq.met ? '✅' : '❌'} ${prereq.blockingReasons.join(', ')}` ).join('\n')}" ``` **Benefits:** - Single call gets complete workflow context - Shows all allowed transitions from config - Detects cascade events automatically - Validates prerequisites for each option - Works with user's custom workflows ### Action 5: Phase 3 Handoff (Tasks Ready to Execute) **Scenario:** Feature has tasks created and ready to execute, but feature status is still "planning" or "draft" **User asks:** "Progress feature to in-development before executing tasks" **Workflow:** ```javascript // Check feature status feature = query_container(operation="get", containerType="feature", id=featureId) if (feature.status == "planning" || feature.status == "draft") { // Get recommendation recommendation = get_next_status(containerId=featureId, containerType="feature") // Explain the cascade event and use recommendation "✅ Feature ready to progress from: ${feature.status} Recommended next status: ${recommendation.recommendedStatus} Active flow: ${recommendation.activeFlow} Cascade Event: tasks_ready_to_execute Trigger: Tasks created and ready for specialist execution Why this matters: - Feature status must reflect current development phase - Config determines execution phase status name (not hardcoded) - Your workflow uses: ${recommendation.activeFlow} To progress: manage_container(operation=\"setStatus\", containerType=\"feature\", id=\"${featureId}\", status=\"${recommendation.recommendedStatus}\") Then delegate to Task Orchestration Skill for parallel execution." } ``` **When this applies:** - After Phase 2 (task breakdown) completes - Before Phase 3 (task execution) begins - When resuming paused feature work with pending tasks **Why critical:** - Prevents feature from jumping directly to completion (skips execution phase) - Enables proper cascade event detection (tasks_ready_to_execute) - Ensures workflow state reflects reality (config-driven status progression) - Required for StatusValidator prerequisite checks - Respects user's custom workflow (not hardcoded to specific status names) ## Understanding User-Defined Flows **Critical:** Flows are defined by the USER in their config.yaml. Don't assume any specific flows exist. **Check user's actual flows:** ```javascript config = Read(".taskorchestrator/config.yaml") taskFlows = Object.keys(config.status_progression.tasks).filter(key => key.endsWith('_flow')) // Tell user: "Your config has these task flows: [list]" ``` **Default config has** (IF user hasn't customized): - Tasks: `default_flow`, `bug_fix_flow`, `documentation_flow`, `hotfix_flow`, `with_review` - Features: `default_flow`, `rapid_prototype_flow`, `with_review_flow` - Projects: `default_flow` **For custom flow examples (research, compliance, experiments, etc.):** Read `./examples.md` **For tag-based flow selection details:** Read `./examples.md` ## What to Read from Config **Read selectively** - only load sections needed to explain user's rules: ```javascript config = Read(".taskorchestrator/config.yaml") // Section 1: Validation rules (always useful) validationRules = config.status_validation // - enforce_sequential: Can skip statuses? // - allow_backward: Can move backwards? // - allow_emergency: Can jump to blocked/cancelled? // - validate_prerequisites: Does StatusValidator check requirements? // Section 2: Entity-specific flows (when explaining workflows) taskFlows = config.status_progression.tasks emergencyStatuses = config.status_progression.tasks.emergency_transitions terminalStatuses = config.status_progression.tasks.terminal_statuses ``` **For detailed config structure reference:** Read `./config-reference.md` ## Best Practices 1. **Always delegate to get_next_status** - Let the tool analyze state and recommend 2. **Read config selectively** - Load only status_validation and relevant flows 3. **Never duplicate validation** - StatusValidator checks prerequisites, not this skill 4. **Explain user's specific config** - Don't assume default flows exist 5. **Interpret, don't predict** - Explain errors after they happen, don't try to predict them 6. **Use progressive loading** - Load supporting files (examples.md, validation-errors.md, config-reference.md) only when needed 7. **Emphasize user control** - Flows are defined by user, not hardcoded by system ## Supporting Files **Load on demand for specific scenarios:** - **./examples.md** - Custom flow examples, tag-based selection patterns - Load when: User asks about custom flows, workflow possibilities, tag routing - **./validation-errors.md** - Common errors, prerequisite failures, fix patterns - Load when: StatusValidator error occurs, user asks about validation rules - **./config-reference.md** - Detailed config structure, backward movement, integration - Load when: User asks about configuration, how to customize workflows ## Key Reminders **Your Role (Lightweight Coordination):** - ✅ Delegate to get_next_status for all recommendations - ✅ Read config.status_validation to explain user's rules - ✅ Interpret StatusValidator errors with context - ✅ Show forward/backward/emergency patterns with WHY explanations - ✅ Reference user's ACTUAL config, not assumed defaults - ✅ Load supporting files only when needed (progressive loading) **What You DON'T Do:** - ❌ Don't manually validate transitions (StatusValidator's job) - ❌ Don't check prerequisites before transitions (StatusValidator's job) - ❌ Don't duplicate logic from get_next_status (delegate to tool) - ❌ Don't assume specific flows exist (user-defined, could be customized) - ❌ Don't load all supporting files upfront (use progressive loading) **Complementary Roles:** - **get_next_status** reads config, analyzes tags, recommends (read-only) - **StatusValidator** enforces rules, checks prerequisites (write-time) - **You** interpret results, explain possibilities (guidance)