Refactor team collaboration skills and update documentation

- Renamed `team-lifecycle-v5` to `team-lifecycle` across various documentation files for consistency.
- Updated references in code examples and usage sections to reflect the new skill name.
- Added a new command file for the `monitor` functionality in the `team-iterdev` skill, detailing the coordinator's monitoring events and task management.
- Introduced new components for dynamic pipeline visualization and session coordinates display in the frontend.
- Implemented utility functions for pipeline stage detection and status derivation based on message history.
- Enhanced the team role panel to map members to their respective pipeline roles with status indicators.
- Updated Chinese documentation to reflect the changes in skill names and descriptions.
This commit is contained in:
catlog22
2026-03-04 11:07:48 +08:00
parent 5e96722c09
commit ffd5282932
132 changed files with 2938 additions and 18916 deletions

View File

@@ -1,203 +0,0 @@
# Command: verify
> 回归测试与质量验证。运行测试套件、类型检查、lint、可选 CLI 质量分析。对比 debt_score_before vs debt_score_after 评估改善程度。
## When to Use
- Phase 3 of Validator
- 修复操作已完成,需要验证结果
- Fix-Verify 循环中的验证阶段
**Trigger conditions**:
- TDVAL-* 任务进入 Phase 3
- 修复日志可用fix-log.json
- 需要对比 before/after 指标
## Strategy
### Delegation Mode
**Mode**: Sequential Checks + Optional CLI Analysis
**CLI Tool**: `gemini` (for quality comparison)
**CLI Mode**: `analysis`
### Decision Logic
```javascript
// 验证策略选择
const checks = ['test_suite', 'type_check', 'lint_check']
// 可选CLI 质量分析(仅当修改文件较多时)
if (modifiedFiles.length > 5) {
checks.push('cli_quality_analysis')
}
// Fix-Verify 循环中的验证:聚焦于回归文件
const isFixVerify = task.description.includes('fix-verify')
if (isFixVerify) {
// 仅验证上次回归的文件
targetScope = 'regression_files_only'
}
```
## Execution Steps
### Step 1: Context Preparation
```javascript
// 获取修改文件列表
const modifiedFiles = fixLog.files_modified || []
// 获取原始债务分数
const debtScoreBefore = sharedMemory.debt_score_before || 0
// Worktree 路径(从 shared memory 加载)
const worktreePath = sharedMemory.worktree?.path || null
const cmdPrefix = worktreePath ? `cd "${worktreePath}" && ` : ''
// 检测可用的验证工具(在 worktree 中检测)
const hasNpm = Bash(`${cmdPrefix}which npm 2>/dev/null && echo "yes" || echo "no"`).trim() === 'yes'
const hasTsc = Bash(`${cmdPrefix}which npx 2>/dev/null && npx tsc --version 2>/dev/null && echo "yes" || echo "no"`).includes('yes')
const hasEslint = Bash(`${cmdPrefix}npx eslint --version 2>/dev/null && echo "yes" || echo "no"`).includes('yes')
const hasPytest = Bash(`${cmdPrefix}which pytest 2>/dev/null && echo "yes" || echo "no"`).trim() === 'yes'
```
### Step 2: Execute Strategy
```javascript
// === Check 1: Test Suiteworktree 中执行) ===
let testOutput = ''
let testsPassed = true
let testRegressions = 0
if (hasNpm) {
testOutput = Bash(`${cmdPrefix}npm test 2>&1 || true`)
} else if (hasPytest) {
testOutput = Bash(`${cmdPrefix}python -m pytest 2>&1 || true`)
} else {
testOutput = 'no-test-runner'
}
if (testOutput !== 'no-test-runner') {
testsPassed = !/FAIL|error|failed/i.test(testOutput)
testRegressions = testsPassed ? 0 : (testOutput.match(/(\d+) failed/)?.[1] || 1) * 1
}
// === Check 2: Type Checkingworktree 中执行) ===
let typeErrors = 0
if (hasTsc) {
const tscOutput = Bash(`${cmdPrefix}npx tsc --noEmit 2>&1 || true`)
typeErrors = (tscOutput.match(/error TS/g) || []).length
}
// === Check 3: Lintingworktree 中执行) ===
let lintErrors = 0
if (hasEslint && modifiedFiles.length > 0) {
const lintOutput = Bash(`${cmdPrefix}npx eslint --no-error-on-unmatched-pattern ${modifiedFiles.join(' ')} 2>&1 || true`)
lintErrors = (lintOutput.match(/(\d+) error/)?.[0]?.match(/\d+/)?.[0] || 0) * 1
}
// === Check 4: Optional CLI Quality Analysis ===
let qualityImprovement = 0
if (checks.includes('cli_quality_analysis')) {
const prompt = `PURPOSE: Compare code quality before and after tech debt cleanup to measure improvement
TASK: • Analyze the modified files for quality metrics • Compare complexity, duplication, naming quality • Assess if the changes actually reduced debt • Identify any new issues introduced
MODE: analysis
CONTEXT: ${modifiedFiles.map(f => `@${f}`).join(' ')}
EXPECTED: Quality comparison with: metrics_before, metrics_after, improvement_score (0-100), new_issues_found
CONSTRAINTS: Focus on the specific changes, not overall project quality`
Bash(`ccw cli -p "${prompt}" --tool gemini --mode analysis --rule analysis-review-code-quality${worktreePath ? ' --cd "' + worktreePath + '"' : ''}`, {
run_in_background: true
})
// 等待 CLI 完成,解析质量改善分数
}
// === 计算债务分数 ===
// 已修复的项不计入 after 分数
const fixedDebtIds = new Set(
(sharedMemory.fix_results?.files_modified || [])
.flatMap(f => debtInventory.filter(i => i.file === f).map(i => i.id))
)
const debtScoreAfter = debtInventory.filter(i => !fixedDebtIds.has(i.id)).length
```
### Step 3: Result Processing
```javascript
const totalRegressions = testRegressions + typeErrors + lintErrors
const passed = totalRegressions === 0
// 如果有少量回归,尝试通过 code-developer 修复
if (totalRegressions > 0 && totalRegressions <= 3) {
const regressionDetails = []
if (testRegressions > 0) regressionDetails.push(`${testRegressions} test failures`)
if (typeErrors > 0) regressionDetails.push(`${typeErrors} type errors`)
if (lintErrors > 0) regressionDetails.push(`${lintErrors} lint errors`)
Task({
subagent_type: "code-developer",
run_in_background: false,
description: `Fix ${totalRegressions} regressions from debt cleanup`,
prompt: `## Goal
Fix regressions introduced by tech debt cleanup.
${worktreePath ? `\n## Worktree强制\n- 工作目录: ${worktreePath}\n- **所有文件操作必须在 ${worktreePath} 下进行**\n- Bash 命令使用 cd "${worktreePath}" && ... 前缀\n` : ''}
## Regressions
${regressionDetails.join('\n')}
## Modified Files
${modifiedFiles.map(f => `- ${f}`).join('\n')}
## Test Output (if failed)
${testOutput.split('\n').filter(l => /FAIL|Error|error/i.test(l)).slice(0, 20).join('\n')}
## Constraints
- Fix ONLY the regressions, do not undo the debt fixes
- Preserve the debt cleanup changes
- Do NOT skip tests or add suppressions`
})
// Re-run checks after fix attempt
// ... (simplified: re-check test suite)
}
// 生成最终验证结果
const validationReport = {
passed,
regressions: totalRegressions,
debt_score_before: debtScoreBefore,
debt_score_after: debtScoreAfter,
improvement_percentage: debtScoreBefore > 0
? Math.round(((debtScoreBefore - debtScoreAfter) / debtScoreBefore) * 100)
: 0
}
```
## Output Format
```
## Validation Results
### Status: [PASS|FAIL]
### Regressions: [count]
- Test Suite: [PASS|FAIL] ([n] regressions)
- Type Check: [PASS|FAIL] ([n] errors)
- Lint: [PASS|FAIL] ([n] errors)
- Quality: [IMPROVED|NO_CHANGE]
### Debt Score
- Before: [score]
- After: [score]
- Improvement: [%]%
```
## Error Handling
| Scenario | Resolution |
|----------|------------|
| No test runner available | Skip test check, rely on type+lint |
| tsc not available | Skip type check, rely on test+lint |
| eslint not available | Skip lint check, rely on test+type |
| All checks unavailable | Report minimal validation, warn coordinator |
| Fix attempt introduces new regressions | Revert fix, report original regressions |
| CLI quality analysis times out | Skip quality analysis, use debt score comparison only |

View File

@@ -1,235 +0,0 @@
# 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",
session_id: <session-id>,
from: "validator",
type: <message-type>,
ref: <artifact-path>
})
```
**CLI fallback** (when MCP unavailable):
```
Bash("ccw team log --session-id <session-id> --from validator --type <message-type> --ref <artifact-path> --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 | `<session-folder>/.msg/meta.json` | Yes |
| Fix log | `<session-folder>/fixes/fix-log.json` | No |
**Loading steps**:
1. Extract session path from task description
2. Read .msg/meta.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 "<worktree-path>" && ` |
| 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 | `<cmdPrefix>npm test` or `<cmdPrefix>npx vitest run` |
| Python | `<cmdPrefix>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 | `<cmdPrefix>npx tsc --noEmit` |
|---------|-------------------------------|
| Pass Criteria | Status |
|---------------|--------|
| No TS errors or "skip" | PASS |
| TS errors found | FAIL + count errors |
**3. Lint Check** (in worktree):
| Command | `<cmdPrefix>npx eslint --no-error-on-unmatched-pattern <files>` |
|---------|----------------------------------------------------------------|
| 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 `<session-folder>/validation/validation-report.json`
2. Update .msg/meta.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 |