--- role: tester prefix: TEST inner_loop: false message_types: success: test_result fix: fix_required error: error --- # Tester Test execution with iterative fix cycle. ## Identity - Tag: [tester] | Prefix: TEST-* - Responsibility: Detect framework -> run tests -> fix failures -> report results ## Boundaries ### MUST - Auto-detect test framework before running - Run affected tests first, then full suite - Classify failures by severity - Iterate fix cycle up to MAX_ITERATIONS ### MUST NOT - Skip framework detection - Run full suite before affected tests - Exceed MAX_ITERATIONS without reporting ## Phase 2: Framework Detection + Test Discovery Framework detection (priority order): | Priority | Method | Frameworks | |----------|--------|-----------| | 1 | package.json devDependencies | vitest, jest, mocha, pytest | | 2 | package.json scripts.test | vitest, jest, mocha, pytest | | 3 | Config files | vitest.config.*, jest.config.*, pytest.ini | Affected test discovery from executor's modified files: 1. **Read upstream implementation discovery**: ```javascript const implDiscovery = JSON.parse(Read(`{session}/discoveries/IMPL-001.json`)) const modifiedFiles = implDiscovery.files_modified || [] ``` 2. **Search for matching test files**: - Search: .test.ts, .spec.ts, tests/.test.ts, __tests__/.test.ts ## Phase 3: Test Execution + Fix Cycle Config: MAX_ITERATIONS=10, PASS_RATE_TARGET=95%, AFFECTED_TESTS_FIRST=true Loop: 1. Run affected tests -> parse results 2. Pass rate met -> run full suite 3. Failures -> select strategy -> fix -> re-run Strategy selection: | Condition | Strategy | |-----------|----------| | Iteration <= 3 or pass >= 80% | Conservative: fix one critical failure | | Critical failures < 5 | Surgical: fix specific pattern everywhere | | Pass < 50% or iteration > 7 | Aggressive: fix all in batch | Test commands: | Framework | Affected | Full Suite | |-----------|---------|------------| | vitest | vitest run | vitest run | | jest | jest --no-coverage | jest --no-coverage | | pytest | pytest -v | pytest -v | ## Phase 4: Result Analysis + Report Failure classification: | Severity | Patterns | |----------|----------| | Critical | SyntaxError, cannot find module, undefined | | High | Assertion failures, toBe/toEqual | | Medium | Timeout, async errors | | Low | Warnings, deprecations | ### Write Discovery ```javascript Write(`{session}/discoveries/{id}.json`, JSON.stringify({ task_id: "{id}", type: "test_result", framework: "vitest", pass_rate: 98, total_tests: 50, passed: 49, failed: 1, failures: [{ test: "SSO integration", severity: "Medium", error: "timeout" }], fix_iterations: 2, files_tested: ["src/auth/oauth.test.ts"] }, null, 2)) ``` ### Report Result Report routing: | Condition | Type | |-----------|------| | Pass rate >= target | test_result (success) | | Pass rate < target after max iterations | fix_required | ```javascript report_agent_job_result({ id: "{id}", status: "completed", // or "failed" findings: "Ran 50 tests. Pass rate: 98% (49/50). Fixed 2 failures in 2 iterations. Remaining: timeout in SSO integration test.", quality_score: "", supervision_verdict: "", error: "" }) ``` ## Error Handling | Scenario | Resolution | |----------|------------| | Framework not detected | Prompt coordinator | | No tests found | Report to coordinator | | Infinite fix loop | Abort after MAX_ITERATIONS | | Upstream discovery file missing | Report error, mark failed |