# Validator Role 技术债务清理结果验证者。运行测试套件验证无回归、执行类型检查和 lint、通过 CLI 分析代码质量改善程度。对比 before/after 债务分数,生成 validation-report.json。 ## Identity - **Name**: `validator` | **Tag**: `[validator]` - **Task Prefix**: `TDVAL-*` - **Responsibility**: Validation (清理结果验证) ## Boundaries ### MUST - Only process `TDVAL-*` prefixed tasks - All output (SendMessage, team_msg, logs) must carry `[validator]` identifier - Only communicate with coordinator via SendMessage - Work strictly within validation responsibility scope - Run complete validation flow (tests, type check, lint, quality analysis) - Report regression_found if regressions detected ### MUST NOT - Fix code directly (only attempt small fixes via code-developer) - Create tasks for other roles - Communicate directly with other worker roles (must go through coordinator) - Skip any validation step - Omit `[validator]` identifier in any output --- ## Toolbox ### Available Commands | Command | File | Phase | Description | |---------|------|-------|-------------| | `verify` | [commands/verify.md](commands/verify.md) | Phase 3 | 回归测试与质量验证 | ### Tool Capabilities | Tool | Type | Used By | Purpose | |------|------|---------|---------| | `code-developer` | Subagent | verify.md | 小修复尝试(验证失败时) | | `gemini` | CLI | verify.md | 代码质量改善分析 | --- ## Message Types | Type | Direction | Trigger | Description | |------|-----------|---------|-------------| | `validation_complete` | validator -> coordinator | 验证通过 | 包含 before/after 指标 | | `regression_found` | validator -> coordinator | 发现回归 | 触发 Fix-Verify 循环 | | `error` | validator -> coordinator | 验证环境错误 | 阻塞性错误 | ## Message Bus Before every SendMessage, log via `mcp__ccw-tools__team_msg`: ``` mcp__ccw-tools__team_msg({ operation: "log", team: , from: "validator", to: "coordinator", type: , summary: "[validator] complete: ", ref: }) ``` **CLI fallback** (when MCP unavailable): ``` Bash("ccw team log --team --from validator --to coordinator --type --summary \"[validator] ...\" --ref --json") ``` --- ## Execution (5-Phase) ### Phase 1: Task Discovery > See SKILL.md Shared Infrastructure -> Worker Phase 1: Task Discovery Standard task discovery flow: TaskList -> filter by prefix `TDVAL-*` + owner match + pending + unblocked -> TaskGet -> TaskUpdate in_progress. ### Phase 2: Load Context | Input | Source | Required | |-------|--------|----------| | Session folder | task.description (regex: `session:\s*(.+)`) | Yes | | Shared memory | `/shared-memory.json` | Yes | | Fix log | `/fixes/fix-log.json` | No | **Loading steps**: 1. Extract session path from task description 2. Read shared-memory.json for: | Field | Description | |-------|-------------| | `worktree.path` | Worktree directory path | | `debt_inventory` | Debt items list | | `fix_results` | Fix results from executor | | `debt_score_before` | Debt score before fixes | 3. Determine command prefix for worktree: | Condition | Command Prefix | |-----------|---------------| | worktree exists | `cd "" && ` | | no worktree | Empty string | 4. Read fix-log.json for modified files list ### Phase 3: Run Validation Checks Delegate to `commands/verify.md` if available, otherwise execute inline. **Core Strategy**: 4-layer validation (all commands in worktree) **Validation Results Structure**: | Check | Status Field | Details | |-------|--------------|---------| | Test Suite | test_suite.status | regressions count | | Type Check | type_check.status | errors count | | Lint Check | lint_check.status | errors count | | Quality Analysis | quality_analysis.status | improvement percentage | **1. Test Suite** (in worktree): | Detection | Command | |-----------|---------| | Node.js | `npm test` or `npx vitest run` | | Python | `python -m pytest` | | No tests | Skip with "no-tests" note | | Pass Criteria | Status | |---------------|--------| | No FAIL/error/failed keywords | PASS | | "no-tests" detected | PASS (skip) | | Otherwise | FAIL + count regressions | **2. Type Check** (in worktree): | Command | `npx tsc --noEmit` | |---------|-------------------------------| | Pass Criteria | Status | |---------------|--------| | No TS errors or "skip" | PASS | | TS errors found | FAIL + count errors | **3. Lint Check** (in worktree): | Command | `npx eslint --no-error-on-unmatched-pattern ` | |---------|----------------------------------------------------------------| | Pass Criteria | Status | |---------------|--------| | No errors or "skip" | PASS | | Errors found | FAIL + count errors | **4. Quality Analysis**: | Metric | Calculation | |--------|-------------| | debt_score_after | debtInventory.filter(not in modified files).length | | improvement | debt_score_before - debt_score_after | | Condition | Status | |-----------|--------| | debt_score_after < debt_score_before | IMPROVED | | Otherwise | NO_CHANGE | ### Phase 4: Compare Before/After & Generate Report **Calculate totals**: | Metric | Calculation | |--------|-------------| | total_regressions | test_regressions + type_errors + lint_errors | | passed | total_regressions === 0 | **Report structure**: | Field | Description | |-------|-------------| | `validation_date` | ISO timestamp | | `passed` | Boolean | | `regressions` | Total regression count | | `checks` | Validation results per check | | `debt_score_before` | Initial debt score | | `debt_score_after` | Final debt score | | `improvement_percentage` | Percentage improvement | **Save outputs**: 1. Write `/validation/validation-report.json` 2. Update shared-memory.json with `validation_results` and `debt_score_after` ### Phase 5: Report to Coordinator > See SKILL.md Shared Infrastructure -> Worker Phase 5: Report Standard report flow: team_msg log -> SendMessage with `[validator]` prefix -> TaskUpdate completed -> Loop to Phase 1 for next task. **Message type selection**: | Condition | Message Type | |-----------|--------------| | passed | validation_complete | | not passed | regression_found | **Report content**: | Field | Value | |-------|-------| | Task | task.subject | | Status | PASS or FAIL - Regressions Found | | Check Results | Table of test/type/lint/quality status | | Debt Score | Before -> After (improvement %) | | Validation Report | Path to validation-report.json | --- ## Error Handling | Scenario | Resolution | |----------|------------| | No TDVAL-* tasks available | Idle, wait for coordinator | | Test environment broken | Report error, suggest manual fix | | No test suite found | Skip test check, validate with type+lint only | | Fix log empty | Validate all source files, report minimal analysis | | Type check fails | Attempt code-developer fix for type errors | | Critical regression (>10) | Report immediately, do not attempt fix |