UNPKG

aios-core

Version:

Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework

925 lines (707 loc) 27.4 kB
# Develop Story Task ## Purpose Execute story development with selectable automation modes to accommodate different developer preferences, skill levels, and story complexity. --- ## Execution Modes **Choose your execution mode:** ### 1. YOLO Mode - Fast, Autonomous (0-1 prompts) - Autonomous decision making with logging - Minimal user interaction - **Best for:** Simple, deterministic tasks ### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]** - Explicit decision checkpoints - Educational explanations - **Best for:** Learning, complex decisions ### 3. Pre-Flight Planning - Comprehensive Upfront Planning - Task analysis phase (identify all ambiguities) - Zero ambiguity execution - **Best for:** Ambiguous requirements, critical work **Parameter:** `mode` (optional, default: `interactive`) **Usage**: ``` *develop {story-id} # Uses interactive mode (default) *develop {story-id} yolo # Uses YOLO mode *develop {story-id} preflight # Uses pre-flight planning mode ``` **Edge Case Handling**: - Invalid mode Default to interactive with warning - User cancellation Exit gracefully with message - Missing story file Clear error message, halt execution - Backward compatibility Stories without mode parameter use interactive --- ## Task Definition (AIOS Task Format V1.0) ```yaml task: devDevelopStory() responsável: Dex (Builder) responsavel_type: Agente atomic_layer: Organism **Entrada:** - campo: task tipo: string origem: User Input obrigatório: true validação: Must be registered task - campo: parameters tipo: object origem: User Input obrigatório: false validação: Valid task parameters - campo: mode tipo: string origem: User Input obrigatório: false validação: yolo|interactive|pre-flight **Saída:** - campo: execution_result tipo: object destino: Memory persistido: false - campo: logs tipo: array destino: File (.ai/logs/*) persistido: true - campo: state tipo: object destino: State management persistido: true ``` --- ## Constitutional Gates > **Reference:** Constitution Articles I, III > **Enforcement:** Automatic validation before execution ### Gate 1: Story-Driven Development (Article III) ```yaml constitutional_gate: article: III name: Story-Driven Development severity: BLOCK validation: - Story file MUST exist at docs/stories/{storyId}/story.yaml - Story MUST have status != "Draft" (Ready, In Progress, or Done) - Story MUST have acceptance criteria defined - Story MUST have at least one task/subtask on_violation: action: BLOCK message: | CONSTITUTIONAL VIOLATION: Article III - Story-Driven Development Cannot develop without a valid story. Issue: {violation_details} Resolution: Create or update story via @sm *draft or @po *create-story ``` ### Gate 2: CLI First (Article I) ```yaml constitutional_gate: article: I name: CLI First severity: WARN validation: - If story involves new functionality: - CLI implementation SHOULD exist or be created first - UI components SHOULD NOT be created before CLI is functional on_violation: action: WARN message: | CONSTITUTIONAL WARNING: Article I - CLI First UI implementation detected without CLI foundation. Reminder: CLI First Observability Second UI Third Continue anyway? (This will be logged) ``` --- ## Pre-Conditions **Purpose:** Validate prerequisites BEFORE task execution (blocking) **Checklist:** ```yaml pre-conditions: - [ ] Constitutional gates passed (Article III: Story exists, Article I: CLI First check) tipo: constitutional-gate blocker: true validação: | Verify story exists and has valid structure error_message: "Constitutional violation - see gate output above" - [ ] Task is registered; required parameters provided; dependencies met tipo: pre-condition blocker: true validação: | Check task is registered; required parameters provided; dependencies met error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met" ``` --- ## Post-Conditions **Purpose:** Validate execution success AFTER task completes **Checklist:** ```yaml post-conditions: - [ ] Task completed; exit code 0; expected outputs created tipo: post-condition blocker: true validação: | Verify task completed; exit code 0; expected outputs created error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created" ``` --- ## Acceptance Criteria **Purpose:** Definitive pass/fail criteria for task completion **Checklist:** ```yaml acceptance-criteria: - [ ] Task completed as expected; side effects documented tipo: acceptance-criterion blocker: true validação: | Assert task completed as expected; side effects documented error_message: "Acceptance criterion not met: Task completed as expected; side effects documented" ``` --- ## Scripts **Agent-specific code for this task:** - **Script:** execute-task.js - **Purpose:** Generic task execution wrapper - **Language:** JavaScript - **Location:** .aios-core/scripts/execute-task.js --- ## Error Handling **Strategy:** abort **Common Errors:** 1. **Error:** Task Not Found - **Cause:** Specified task not registered in system - **Resolution:** Verify task name and registration - **Recovery:** List available tasks, suggest similar 2. **Error:** Invalid Parameters - **Cause:** Task parameters do not match expected schema - **Resolution:** Validate parameters against task definition - **Recovery:** Provide parameter template, reject execution 3. **Error:** Execution Timeout - **Cause:** Task exceeds maximum execution time - **Resolution:** Optimize task or increase timeout - **Recovery:** Kill task, cleanup resources, log state --- ## Performance **Expected Metrics:** ```yaml duration_expected: 5-15 min (estimated) cost_estimated: $0.003-0.010 token_usage: ~3,000-10,000 tokens ``` **Optimization Notes:** - Break into smaller workflows; implement checkpointing; use async processing where possible --- ## Metadata ```yaml story: N/A version: 1.0.0 dependencies: - N/A tags: - development - code updated_at: 2025-11-17 ``` --- ## Mode: YOLO (Autonomous) ### Workflow **CRITICAL: Decision Logging Integration (Story 6.1.2.6.2 Phase 2)** Before starting, load decision logging infrastructure: ```javascript const { initializeDecisionLogging, recordDecision, trackFile, trackTest, completeDecisionLogging } = require('./.aios-core/scripts/decision-recorder'); ``` 1. **Initialization** (On Yolo Mode Start) - Read story file completely - Extract story path from context - **Initialize decision logging**: ```javascript const context = await initializeDecisionLogging('dev', storyPath, { agentLoadTime: loadTimeInMs // From agent startup metrics }); ``` - Identify all tasks and acceptance criteria - Analyze technical requirements 2. **Task Execution** (Autonomous loop) - Read next task - **Make autonomous decisions** and LOG immediately: **Architecture choices**: ```javascript recordDecision({ description: 'Use microservices architecture for user service', reason: 'Better scalability and independent deployment', alternatives: ['Monolithic architecture', 'Serverless functions'], type: 'architecture', priority: 'high' }); ``` **Library selections**: ```javascript recordDecision({ description: 'Use Axios for HTTP client', reason: 'Better error handling, interceptor support, TypeScript definitions', alternatives: ['Fetch API (native)', 'Got library', 'node-fetch'], type: 'library-choice', priority: 'medium' }); ``` **Algorithm implementations**: ```javascript recordDecision({ description: 'Use binary search for user lookup', reason: 'O(log n) performance vs O(n) linear search', alternatives: ['Linear search', 'Hash map lookup'], type: 'algorithm', priority: 'medium' }); ``` - Implement task and subtasks - **Track file modifications**: ```javascript trackFile('src/api/users.js', 'created'); trackFile('package.json', 'modified'); trackFile('src/legacy/old-api.js', 'deleted'); ``` - Write tests - Execute validations - **Track test execution**: ```javascript trackTest({ name: 'users.test.js', passed: true, duration: 125 // milliseconds }); ``` - Mark task complete [x] only if ALL validations pass - Update File List 3. **Decision Logging** (Automatic) - All decisions tracked in memory during execution - File operations logged automatically - Test results recorded - Metrics collected (execution time, agent load time) - **Format**: ADR (Architecture Decision Record) compliant - **No manual logging needed** - use API only 4. **Completion** (On Yolo Mode Completion) - All tasks complete - All tests pass - Execute story-dod-checklist - Set status: "Ready for Review" - **Generate decision log**: ```javascript const logPath = await completeDecisionLogging(storyId, 'completed'); console.log(`📝 Decision log saved: ${logPath}`); ``` - **Summary**: Decision log summary displayed automatically - Log file: `.ai/decision-log-{story-id}.md` (ADR format) **User Prompts**: 0-1 (only if blocking issue requires approval) --- ## Mode: Interactive (Balanced) **[DEFAULT]** ### Workflow 1. **Story Analysis** (With User) - Read story file completely - Present summary of tasks and AC - Confirm understanding with user 2. **Task Execution** (Interactive loop) - Read next task - **Decision Checkpoints** (Prompt user at): - Architecture decisions (e.g., "Use microservices or monolith?") - Library selections (e.g., "Use Axios or Fetch?") - Algorithm choices (e.g., "Use BFS or DFS for graph traversal?") - Testing approaches (e.g., "Unit tests or integration tests first?") - **Educational Explanations**: - Before each decision: Explain the options and trade-offs - After user choice: Explain why it's a good fit for this context - During implementation: Explain what you're doing and why - Implement task and subtasks - Write tests - Execute validations - Show results to user before marking [x] - Update File List 3. **Completion** - All tasks complete - All tests pass - Execute story-dod-checklist - Present completion summary to user - Set status: "Ready for Review" **User Prompts**: 5-10 (balanced for control and speed) --- ## Mode: Pre-Flight Planning (Comprehensive) ### Workflow 1. **Story Analysis Phase** - Read story file completely - **Identify all ambiguities**: - Missing technical specifications - Unspecified library choices - Unclear acceptance criteria - Undefined edge case handling - Missing testing guidance 2. **Questionnaire Generation** - Generate comprehensive questions covering: - Architecture decisions - Library and framework choices - Algorithm and data structure selections - Testing strategy - Edge case handling - Performance requirements - Security considerations - Present all questions to user at once - Collect all responses in batch 3. **Execution Plan Creation** - Create detailed execution plan with all decisions documented - Present plan to user for approval - Wait for user confirmation before proceeding 4. **Zero-Ambiguity Execution** - Execute tasks with full context from questionnaire - No additional decision points (all decided in pre-flight) - Implement task and subtasks - Write tests - Execute validations - Mark task complete [x] only if ALL validations pass - Update File List 5. **Completion** - All tasks complete - All tests pass - Execute story-dod-checklist - Present execution summary vs. plan - Set status: "Ready for Review" **User Prompts**: All upfront (questionnaire phase), then 0 during execution --- ## Common Workflow (All Modes) ### Order of Execution 1. Read (first or next) task 2. **Code Intelligence Check (IDS G4)** Before creating new files or functions: - If code intelligence is available (`isCodeIntelAvailable()` from `.aios-core/core/code-intel`): - Call `checkBeforeWriting(fileName, description)` from `.aios-core/core/code-intel/helpers/dev-helper` - If result is not null, display as **"Code Intelligence Suggestion"** (non-blocking advisory) - Log suggestion in decision-log if in YOLO mode - If code intelligence is NOT available: skip silently (zero impact on workflow) 3. Implement task and its subtasks 4. Write tests 5. Execute validations 6. **Only if ALL pass**: Mark task checkbox [x] 7. Update story File List (ensure all created/modified/deleted files listed) 8. Repeat until all tasks complete ### Story File Updates (All Modes) **CRITICAL**: ONLY update these sections: - Tasks / Subtasks checkboxes - Dev Agent Record section and all subsections - Agent Model Used - Debug Log References - Completion Notes List - File List - Change Log (add entry on completion) - Status (set to "Ready for Review" when complete) **DO NOT modify**: Story, Acceptance Criteria, Dev Notes, Testing sections ### Blocking Conditions (All Modes) **HALT and ask user if**: - Unapproved dependencies needed - Ambiguous requirements after checking story - 3 failures attempting to implement or fix something - Missing configuration - Failing regression tests ### Ready for Review Criteria (All Modes) - Code matches all requirements - All validations pass - Follows coding standards - File List is complete and accurate ### Completion Checklist (All Modes) 1. All tasks and subtasks marked [x] 2. All have corresponding tests 3. All validations pass 4. Full regression test suite passes 5. File List is complete 6. **Execute CodeRabbit Self-Healing Loop** (see below) 7. Execute `.aios-core/product/checklists/story-dod-checklist.md` 8. Set story status: "Ready for Review" 9. HALT (do not proceed further) --- ## CodeRabbit Self-Healing Loop (Story 6.3.3) **Purpose**: Catch and auto-fix code quality issues before marking story as "Ready for Review" **Configuration**: Light self-healing (max 2 iterations, CRITICAL issues only) ### When to Execute Execute **AFTER** all tasks are complete but **BEFORE** running the DOD checklist. ### Self-Healing Workflow ``` ┌──────────────────────────────────────────────────────────────┐ CODERABBIT SELF-HEALING (Light Mode - @dev) ├──────────────────────────────────────────────────────────────┤ iteration = 0 max_iterations = 2 WHILE iteration < max_iterations: ┌────────────────────────────────────────────────────┐ 1. Run CodeRabbit CLI wsl bash -c 'cd /mnt/c/.../aios-core && │ │ │ │ ~/.local/bin/coderabbit --prompt-only │ │ │ │ -t uncommitted' 2. Parse output for severity levels └────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────┐ IF no CRITICAL issues: - Document HIGH issues in story Dev Notes - Log: "✅ CodeRabbit passed" - BREAK Proceed to DOD checklist └────────────────────────────────────────────────────┘ ┌────────────────────────────────────────────────────┐ IF CRITICAL issues found: - Attempt auto-fix for each issue - iteration++ - CONTINUE loop └────────────────────────────────────────────────────┘ IF iteration == 2 AND CRITICAL issues remain: - Log: "❌ CRITICAL issues remain" - HALT and report to user - DO NOT mark story complete └──────────────────────────────────────────────────────────────┘ ``` ### Implementation Code ```javascript async function runCodeRabbitSelfHealing(storyPath) { const maxIterations = 2; let iteration = 0; console.log('🐰 Starting CodeRabbit Self-Healing Loop...'); console.log(` Mode: Light (CRITICAL only)`); console.log(` Max Iterations: ${maxIterations}\n`); while (iteration < maxIterations) { console.log(`📋 Iteration ${iteration + 1}/${maxIterations}`); // Run CodeRabbit CLI const output = await runCodeRabbitCLI('uncommitted'); const issues = parseCodeRabbitOutput(output); const criticalIssues = issues.filter(i => i.severity === 'CRITICAL'); const highIssues = issues.filter(i => i.severity === 'HIGH'); console.log(` Found: ${criticalIssues.length} CRITICAL, ${highIssues.length} HIGH`); // No CRITICAL issues = success if (criticalIssues.length === 0) { if (highIssues.length > 0) { console.log(`\n📝 Documenting ${highIssues.length} HIGH issues in story Dev Notes...`); await documentIssuesInStory(storyPath, highIssues); } console.log('\n✅ CodeRabbit Self-Healing: PASSED'); return { success: true, iterations: iteration + 1 }; } // Attempt auto-fix for CRITICAL issues console.log(`\n🔧 Attempting auto-fix for ${criticalIssues.length} CRITICAL issues...`); for (const issue of criticalIssues) { await attemptAutoFix(issue); } iteration++; } // Max iterations reached with CRITICAL issues console.log('\n❌ CodeRabbit Self-Healing: FAILED'); console.log(` CRITICAL issues remain after ${maxIterations} iterations.`); console.log(' HALTING - Please fix manually before marking story complete.'); return { success: false, iterations: maxIterations }; } ``` ### Severity Handling | Severity | Behavior | Notes | |----------|----------|-------| | **CRITICAL** | Auto-fix (max 2 attempts) | Security vulnerabilities, breaking bugs | | **HIGH** | Document in story Dev Notes | Recommend fix before QA | | **MEDIUM** | Ignore | @qa will handle | | **LOW** | Ignore | Nits, not blocking | ### Timeout - **Default**: 15 minutes per CodeRabbit run - **Total max**: ~30 minutes (2 iterations) ### Error Handling ```javascript // If CodeRabbit fails try { await runCodeRabbitSelfHealing(storyPath); } catch (error) { if (error.message.includes('command not found')) { console.warn('⚠️ CodeRabbit not installed in WSL'); console.warn(' Skipping self-healing. Manual review required.'); return; // Continue without self-healing } if (error.message.includes('timeout')) { console.warn('⚠️ CodeRabbit review timed out'); console.warn(' Skipping self-healing. Manual review required.'); return; } throw error; // Re-throw unknown errors } ``` ### Integration with Execution Modes | Mode | Self-Healing Behavior | |------|----------------------| | **YOLO** | Automatic, no prompts | | **Interactive** | Shows progress, no prompts | | **Pre-Flight** | Included in execution plan | --- ## Mode Selection Implementation ### Validation ```javascript function validateMode(mode) { const validModes = ['yolo', 'interactive', 'preflight']; if (!mode) { return 'interactive'; // Default } if (validModes.includes(mode.toLowerCase())) { return mode.toLowerCase(); } console.warn(`Invalid mode '${mode}'. Defaulting to 'interactive'.`); console.warn(`Valid modes: ${validModes.join(', ')}`); return 'interactive'; } ``` ### User Cancellation Handling ```javascript function handleCancellation() { console.log('Development cancelled by user.'); console.log('Story progress saved. You can resume with *develop {story-id}.'); process.exit(0); } ``` ### Missing Story File Handling ```javascript function validateStoryFile(storyId) { // Story files are in nested directories: docs/stories/{storyId}/story.yaml const storyPath = `docs/stories/${storyId}/story.yaml`; if (!fs.existsSync(storyPath)) { console.error(`Error: Story file not found at ${storyPath}`); console.error(`Please verify story ID and try again.`); process.exit(1); } return storyPath; } ``` --- ## Decision Log Format (ADR Compliant) **File**: `.ai/decision-log-{story-id}.md` **Format**: ADR (Architecture Decision Record) - automatically generated by `completeDecisionLogging()` **Sections**: 1. **Context** - Story info, execution time, files modified, tests run 2. **Decisions Made** - All autonomous decisions with type/priority classification 3. **Rationale & Alternatives** - Why each choice was made, what else was considered 4. **Implementation Changes** - Files created/modified/deleted, test results 5. **Consequences & Rollback** - Git commit hash, rollback instructions, performance impact **Example Output**: ```markdown # Decision Log: Story 6.1.2.6.2 **Generated:** 2025-11-16T14:30:00.000Z **Agent:** dev **Mode:** Yolo (Autonomous Development) **Story:** docs/stories/story-6.1.2.6.2.md **Rollback:** `git reset --hard abc123def456` --- ## Context **Story Implementation:** 6.1.2.6.2 **Execution Time:** 15m 30s **Status:** completed **Files Modified:** 5 files **Tests Run:** 8 tests **Decisions Made:** 3 autonomous decisions --- ## Decisions Made ### Decision 1: Use Axios for HTTP client **Timestamp:** 2025-11-16T14:32:15.000Z **Type:** library-choice **Priority:** medium **Reason:** Better error handling, interceptor support, and TypeScript definitions **Alternatives Considered:** - Fetch API (native) - Got library - node-fetch --- ## Implementation Changes ### Files Modified - `src/api/client.js` (created) - `package.json` (modified) ### Test Results - PASS: `api.test.js` (125ms) --- ## Consequences & Rollback ### Rollback Instructions \`\`\`bash # Full rollback git reset --hard abc123def456 # Selective file rollback git checkout abc123def456 -- <file-path> \`\`\` ### Performance Impact - Agent Load Time: 150ms - Task Execution Time: 15m 30s - Logging Overhead: Minimal (async, non-blocking) ``` **For complete format specification, see**: `docs/guides/decision-logging-guide.md` --- ## Examples ### Example 1: YOLO Mode ```bash *develop 3.14 yolo ``` **Output**: ``` 🚀 YOLO Mode - Autonomous Development 📋 Story 3.14: GitHub DevOps Agent Executing autonomously with decision logging... Task 1 complete (Decision: Use Octokit library - rationale logged) Task 2 complete (Decision: REST API over GraphQL - rationale logged) Task 3 complete All tests pass 📝 Decision log: .ai/decision-log-3.14.md (3 decisions logged) Story ready for review ``` ### Example 2: Interactive Mode (Default) ```bash *develop 3.15 ``` **Output**: ``` 💬 Interactive Mode - Balanced Development 📋 Story 3.15: Squad Auto Configuration 📖 Task 1: Design configuration schema Decision Point - Schema Format Option 1: YAML (human-readable, widely used) Option 2: JSON (strict typing, better IDE support) Option 3: TOML (simple, clear) Your choice? [1/2/3]: _ ``` ### Example 3: Pre-Flight Planning ```bash *develop 3.16 preflight ``` **Output**: ``` ✈️ Pre-Flight Planning Mode 📋 Story 3.16: Data Architecture Capability 🔍 Analyzing story for ambiguities... Found 5 technical decisions needed. 📝 Pre-Flight Questionnaire: 1. Database choice: PostgreSQL or MySQL? 2. ORM preference: Prisma, TypeORM, or raw SQL? 3. Migration strategy: Sequential or timestamp-based? 4. Backup approach: Daily snapshots or continuous? 5. Testing database: SQLite, Docker PostgreSQL, or mock? [Please answer all questions before proceeding] ``` --- ## Dependencies - `.aios-core/product/checklists/story-dod-checklist.md` - Definition of Done checklist ## Tools - git - Local operations (add, commit, status, diff, log) - File system - Read/write story files - Testing frameworks - Execute validation tests ## Notes - **Backward Compatibility**: Existing commands like `*develop {story-id}` continue to work (use interactive mode) - **Mode Aliases**: Can extend with `*develop-yolo`, `*develop-interactive`, `*develop-preflight` commands - **Decision Logs**: Persisted in `.ai/decision-log-{story-id}.md` for future reference and review - **Educational Value**: Interactive mode explanations help developers learn framework patterns - **Scope Drift Prevention**: Pre-flight mode eliminates mid-development ambiguity ## Handoff next_agent: @qa next_command: *review {story-id} condition: Story status is Ready for Review alternatives: - agent: @qa, command: *gate {story-id}, condition: Quick gate decision needed - agent: @dev, command: *apply-qa-fixes, condition: Self-identified issues during dev