--- name: autonomous-tdd-debugger description: "Empowers the agent to autonomously run tests, read terminal stack traces, and self-heal code until tests pass. Transforms the agent from a passive coder to an active CI pipeline debugger." author: "Roedy Rustam" version: "4.4.2" --- # Autonomous TDD Debugger & Self-Healing Agent [English](#english) | [Bahasa Indonesia](#bahasa-indonesia) --- ## English ### Orchestration & Integration - **Test Frameworks & E2E**: `e2e-testing-expert`, `property-mutation-testing-expert`, `accessibility-testing-expert` - **Quality Gates & Anti-Slop**: `anti-slop`, `ai-code-review-autonomous`, `zero-tech-debt-auditor` - **Formal Verification & Contracts**: `formal-spec-z3-verifier`, `spec-driven-development-expert` - **Error Resilience & Healing**: `error-resilience-expert`, `self-healing-cloud-orchestrator`, `living-codebase-ast-graph` - **Lifecycle & Governance**: `zero-to-prod-orchestrator`, `session-memory-manager` ### Description Transforms the AI agent from a passive code generator into an active, autonomous Test-Driven Development (TDD) engineer. When invoked, the agent is mandated to execute tests, parse terminal stack traces, analyze failing assertions, and autonomously modify code in an iterative self-healing loop until all tests pass (exit code 0)—without prompting the user to manually run commands or debug errors. ### Trigger Conditions - User asks to fix failing tests or debug runtime errors without providing full error logs. - Directives such as *"Write the feature and ensure all tests pass"*, *"Fix this bug autonomously"*, or *"Refactor and verify"*. - Phase 6 (Automated Testing & Quality Gate) execution in `zero-to-prod-orchestrator`. - Post-migration regression validation in `legacy-code-translator`. ### Autonomous Self-Healing Loop (5-Step Protocol) ``` ┌────────────────────────────────────────────────────────┐ │ 1. EXECUTE TEST RUNNER │ │ Run `vitest run`, `cargo test`, `pytest`, or `go test`│ └───────────────────────────┬────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────┐ │ 2. PARSE STACK TRACE & FILTER NOISE │ │ Extract failing file, line number, expected vs actual│ └───────────────────────────┬────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────┐ │ 3. AST BLAST-RADIUS CHECK │ │ Locate caller functions; isolate logic from tests │ └───────────────────────────┬────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────┐ │ 4. APPLY PRECISION PATCH │ │ Fix production implementation; NEVER mock fakes │ └───────────────────────────┬────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────┐ │ 5. RE-RUN & VERIFY (Max 5 Iterations) │ │ Exit Code 0? ──► [YES] Complete & Report Artifact │ │ └──► [NO] Loop back to Step 2 │ └────────────────────────────────────────────────────────┘ ``` ### Self-Healing Script Example (TypeScript / Vitest) ```typescript // scripts/tdd-runner.mjs import { execSync } from 'node:child_process'; import path from 'node:path'; export function runTDDLoop(testPattern = '', maxAttempts = 5): boolean { console.log(`[TDD-Debugger] Starting autonomous test cycle (Limit: ${maxAttempts} attempts)...`); for (let attempt = 1; attempt <= maxAttempts; attempt++) { console.log(`\n--- Attempt ${attempt} of ${maxAttempts} ---`); try { const output = execSync(`npx vitest run ${testPattern} --reporter=verbose`, { encoding: 'utf8', stdio: 'pipe', }); console.log('✅ All tests passed successfully!'); return true; } catch (err: any) { const stdout = err.stdout?.toString() || ''; const stderr = err.stderr?.toString() || ''; const combined = stdout + '\n' + stderr; // Extract failing test location const frameMatch = combined.match(/(?:FAIL|Error:)\s+(.*?):(\d+):(\d+)/) || combined.match(/at\s+(.*?):(\d+):(\d+)/); if (frameMatch) { const [, file, line] = frameMatch; console.warn(`[TDD-Debugger] Failure detected at ${path.basename(file)}:${line}`); } else { console.warn('[TDD-Debugger] Test failure detected. Analyzing raw output...'); } if (attempt === maxAttempts) { console.error('❌ Reached maximum self-healing attempts. Circuit breaker tripped.'); return false; } } } return false; } ``` ### Non-Negotiable Agent Constraints 1. **Zero-Human Intervention**: NEVER ask the user *"Please run this and tell me the error"*. You possess `run_command`—execute it directly in the terminal, read stdout/stderr, and iterate until green. 2. **Respect Test Integrity (Anti-Slop Pillar 2)**: - Do NOT comment out or skip failing tests (`test.skip`) to fake a passing suite. - Do NOT replace failing assertions with trivial tautologies (`expect(true).toBe(true)`). - Fix the production source code first. Only modify test files if the test specification itself is demonstrably obsolete or contradictory. 3. **Circuit Breaker**: Capped at 5 self-healing iterations. If an issue remains unresolved after 5 cycles, pause to re-verify fundamental architectural assumptions. --- #### Stack Trace Frame Parser & Fault Localizer (TypeScript) ```typescript export interface StackFrameLocation { filePath: string; lineNumber: number; columnNumber: number; functionName: string; } export function parseTopFailingFrame(stackTrace: string): StackFrameLocation | null { const frameRegex = /ats+(?:([^s(]+)s+()?([^s():]+:d+:d+))?/; const match = stackTrace.match(frameRegex); if (!match) { return null; } const fnName = match[1] ?? 'anonymous'; const parts = match[2].split(':'); const col = Number(parts.pop()); const line = Number(parts.pop()); const filePath = parts.join(':'); return { filePath, lineNumber: line, columnNumber: col, functionName: fnName }; } ``` ### Sovereign Execution, Token Efficiency & Invariants | Dimension | Sovereign Mandate & Deterministic Contract | | :--- | :--- | | **Frontier Model Cascade** | High Fast / High (`Grok 4.7 High Fast`, `Claude Sonnet 5.5 High`, `Gemini 4 Pro`) | | **Availability Fallback** | `Gemini 4 Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6`; `Grok 4.7` -> `Grok 4.6 High Fast` (Zero unhandled missing-model errors) | | **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out | | **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec autonomous-tdd-debugger ` / MCP: `vibes_skill_dispatch`, `vibes_critic_validate`, `vibes_self_heal`, `vibes_eval_sandbox`, `vibes_verify_invariants` | | **NFR & Anti-Slop Invariants** | Zero OWASP Top 10 vectors, 0 hardcoded secrets, >= 90% branch coverage on domain logic, 0 Anti-Slop violations; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` | --- --- ## Bahasa Indonesia ### Integrasi Orkestrasi - **Framework Pengujian & E2E**: `e2e-testing-expert`, `property-mutation-testing-expert`, `accessibility-testing-expert` - **Gerbang Kualitas & Anti-Slop**: `anti-slop`, `ai-code-review-autonomous`, `zero-tech-debt-auditor` - **Verifikasi Formal & Kontrak**: `formal-spec-z3-verifier`, `spec-driven-development-expert` - **Ketahanan Error & Pemulihan**: `error-resilience-expert`, `self-healing-cloud-orchestrator`, `living-codebase-ast-graph` - **Siklus Hidup & Tata Kelola**: `zero-to-prod-orchestrator`, `session-memory-manager` ### Deskripsi Mengubah agen AI dari sekadar pembuat kode pasif menjadi insinyur *Test-Driven Development* (TDD) yang aktif dan mandiri. Saat diaktifkan, agen diwajibkan menjalankan pengujian otomatis, mem-parsing *stack trace* di terminal, menganalisis kegagalan asersi, dan memodifikasi kode secara otonom dalam siklus perbaikan (*self-healing loop*) berulang hingga seluruh pengujian lulus (*exit code 0*)—tanpa meminta pengguna untuk melakukan pengujian manual. ### Kondisi Pemicu - Pengguna meminta untuk memperbaiki *test* yang gagal atau mencari *bug* tanpa menyertakan log error lengkap. - Instruksi seperti *"Tulis fitur ini dan pastikan semua test lulus"*, *"Debug kode ini secara mandiri"*, atau *"Refaktor dan buktikan dengan test"*. - Eksekusi Fase 6 (Pengujian Otomatis & Gerbang Kualitas) pada `zero-to-prod-orchestrator`. - Verifikasi regresi setelah migrasi kode warisan pada `legacy-code-translator`. ### Siklus Mandiri 5 Langkah ``` 1. JALANKAN TEST RUNNER (via run_command) npx vitest run, cargo test, pytest, atau go test │ ▼ 2. FILTER STACK TRACE & NOISE TERMINAL Ekstrak file yang gagal, nomor baris, nilai aktual vs ekspektasi │ ▼ 3. ANALISIS RADIUS DAMPAK (AST CHECK) Cari fungsi implementasi terkait; pisahkan logika dari file test │ ▼ 4. TERAPKAN PERBAIKAN PRESISI Perbaiki implementasi di kode produksi; DILARANG membuat mock palsu │ ▼ 5. VERIFIKASI ULANG (Maksimal 5 Iterasi) Exit code 0? ──► [YA] Selesai & Laporkan ke pengguna └──► [TIDAK] Ulangi ke Langkah 2 ``` ### Panduan Ketat Tindakan Agen 1. **Dilarang Meminta Bantuan User (Zero-Human Intervention)**: Jangan pernah berkata *"Tolong jalankan perintah ini dan beritahu saya error-nya"*. Anda memiliki tool `run_command` untuk menjalankannya sendiri, membaca output terminal, dan memperbaikinya. 2. **Kepatuhan Anti-Slop (Pilar 2)**: - Dilarang keras menonaktifkan test gagal (`test.skip`) demi memalsukan exit code 0. - Dilarang mengubah asersi menjadi bernilai selalu benar (`expect(true).toBe(true)`). - Selalu perbaiki kode implementasi produksi terlebih dahulu. 3. **Circuit Breaker 5 Siklus**: Jika kode belum berhasil diperbaiki setelah 5 kali iterasi, hentikan loop dan evaluasi ulang arsitektur logika dasar agar tidak menghabiskan konteks. ### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian | Dimensi | Mandat Berdaulat & Kontrak Deterministik | | :--- | :--- | | **Kaskade Model Frontier** | High Fast / High (`Grok 4.7 High Fast`, `Claude Sonnet 5.5 High`, `Gemini 4 Pro`) | | **Invarian Fallback Ketersediaan** | `Gemini 4 Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6`; `Grok 4.7` -> `Grok 4.6 High Fast` (Bebas gagal saat model belum tersedia/kuota penuh) | | **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out | | **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec autonomous-tdd-debugger ` / MCP: `vibes_skill_dispatch`, `vibes_critic_validate`, `vibes_self_heal`, `vibes_eval_sandbox`, `vibes_verify_invariants` | | **Invarian NFR & Anti-Slop** | Nol celah OWASP Top 10, 0 kredensial hardcoded, cakupan pengujian >= 90% pada logika domain, 0 pelanggaran Anti-Slop; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |