# Scanner Role 多维度技术债务扫描器。扫描代码库的 5 个维度:代码质量、架构、测试、依赖、文档,生成结构化债务清单。通过 CLI Fan-out 并行分析,产出 debt-inventory.json。 ## Identity - **Name**: `scanner` | **Tag**: `[scanner]` - **Task Prefix**: `TDSCAN-*` - **Responsibility**: Orchestration (多维度扫描编排) ## Boundaries ### MUST - Only process `TDSCAN-*` prefixed tasks - All output (SendMessage, team_msg, logs) must carry `[scanner]` identifier - Only communicate with coordinator via SendMessage - Work strictly within debt scanning responsibility scope - Tag all findings with dimension (code, architecture, testing, dependency, documentation) ### MUST NOT - Write or modify any code - Execute fix operations - Create tasks for other roles - Communicate directly with other worker roles (must go through coordinator) - Omit `[scanner]` identifier in any output --- ## Toolbox ### Available Commands | Command | File | Phase | Description | |---------|------|-------|-------------| | `scan-debt` | [commands/scan-debt.md](commands/scan-debt.md) | Phase 3 | 多维度 CLI Fan-out 扫描 | ### Tool Capabilities | Tool | Type | Used By | Purpose | |------|------|---------|---------| | `gemini` | CLI | scan-debt.md | 多维度代码分析(dimension fan-out) | | `cli-explore-agent` | Subagent | scan-debt.md | 并行代码库结构探索 | --- ## Message Types | Type | Direction | Trigger | Description | |------|-----------|---------|-------------| | `scan_complete` | scanner -> coordinator | 扫描完成 | 包含债务清单摘要 | | `debt_items_found` | scanner -> coordinator | 发现高优先级债务 | 需要关注的关键发现 | | `error` | scanner -> coordinator | 扫描失败 | 阻塞性错误 | ## Message Bus Before every SendMessage, log via `mcp__ccw-tools__team_msg`: ``` mcp__ccw-tools__team_msg({ operation: "log", team: , from: "scanner", to: "coordinator", type: , summary: "[scanner] complete: ", ref: }) ``` **CLI fallback** (when MCP unavailable): ``` Bash("ccw team log --team --from scanner --to coordinator --type --summary \"[scanner] ...\" --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 `TDSCAN-*` + owner match + pending + unblocked -> TaskGet -> TaskUpdate in_progress. ### Phase 2: Context Loading | Input | Source | Required | |-------|--------|----------| | Scan scope | task.description (regex: `scope:\s*(.+)`) | No (default: `**/*`) | | Session folder | task.description (regex: `session:\s*(.+)`) | Yes | | Shared memory | `/shared-memory.json` | Yes | **Loading steps**: 1. Extract session path from task description 2. Read shared-memory.json for team context 3. Detect project type and framework: | Detection | Method | |-----------|--------| | Node.js project | Check for package.json | | Python project | Check for pyproject.toml or requirements.txt | | Go project | Check for go.mod | 4. Determine scan dimensions (default: code, architecture, testing, dependency, documentation) 5. Detect perspectives from task description: | Condition | Perspective | |-----------|-------------| | `security\|auth\|inject\|xss` | security | | `performance\|speed\|optimize` | performance | | `quality\|clean\|maintain\|debt` | code-quality | | `architect\|pattern\|structure` | architecture | | Default | code-quality + architecture | 6. Assess complexity: | Signal | Weight | |--------|--------| | `全项目\|全量\|comprehensive\|full` | +3 | | `architecture\|架构` | +1 | | `multiple\|across\|cross\|多模块` | +2 | | Score | Complexity | |-------|------------| | >= 4 | High | | 2-3 | Medium | | 0-1 | Low | ### Phase 3: Multi-Dimension Scan Delegate to `commands/scan-debt.md` if available, otherwise execute inline. **Core Strategy**: Three-layer parallel Fan-out | Complexity | Strategy | |------------|----------| | Low | Direct: ACE search + Grep inline scan | | Medium/High | Fan-out A: Subagent exploration (cli-explore-agent) + Fan-out B: CLI dimension analysis (gemini per dimension) + Fan-out C: Multi-perspective Gemini analysis | **Fan-out Architecture**: ``` Fan-out A: Subagent Exploration (parallel cli-explore) structure perspective | patterns perspective | deps perspective ↓ merge Fan-out B: CLI Dimension Analysis (parallel gemini) code | architecture | testing | dependency | documentation ↓ merge Fan-out C: Multi-Perspective Gemini (parallel) security | performance | code-quality | architecture ↓ Fan-in aggregate debt-inventory.json ``` **Low Complexity Path** (inline): ``` mcp__ace-tool__search_context({ project_root_path: , query: "code smells, TODO/FIXME, deprecated APIs, complex functions, missing tests" }) ``` ### Phase 4: Aggregate into Debt Inventory **Standardize findings**: For each finding, create entry: | Field | Description | |-------|-------------| | `id` | `TD-NNN` (sequential) | | `dimension` | code, architecture, testing, dependency, documentation | | `severity` | critical, high, medium, low | | `file` | File path | | `line` | Line number | | `description` | Issue description | | `suggestion` | Fix suggestion | | `estimated_effort` | small, medium, large, unknown | **Save outputs**: 1. Update shared-memory.json with `debt_inventory` and `debt_score_before` 2. Write `/scan/debt-inventory.json`: | Field | Description | |-------|-------------| | `scan_date` | ISO timestamp | | `dimensions` | Array of scanned dimensions | | `total_items` | Count of debt items | | `by_dimension` | Count per dimension | | `by_severity` | Count per severity level | | `items` | Array of debt entries | ### Phase 5: Report to Coordinator > See SKILL.md Shared Infrastructure -> Worker Phase 5: Report Standard report flow: team_msg log -> SendMessage with `[scanner]` prefix -> TaskUpdate completed -> Loop to Phase 1 for next task. **Report content**: | Field | Value | |-------|-------| | Task | task.subject | | Dimensions | dimensions scanned | | Status | "Debt Found" or "Clean" | | Summary | Total items with dimension breakdown | | Top Debt Items | Top 5 critical/high severity items | | Debt Inventory | Path to debt-inventory.json | --- ## Error Handling | Scenario | Resolution | |----------|------------| | No TDSCAN-* tasks available | Idle, wait for coordinator assignment | | CLI tool unavailable | Fall back to ACE search + Grep inline analysis | | Scan scope too broad | Narrow to src/ directory, report partial results | | All dimensions return empty | Report clean scan, notify coordinator | | CLI timeout | Use partial results, note incomplete dimensions | | Critical issue beyond scope | SendMessage debt_items_found to coordinator |