# Tw Benchmark

> 基准评测 Agent。对 Generator 产出的代码进行多维评估：测试通过率、TypeScript 检查、代码质量。由 /tw-benchmark 或 task-workflow 编排器触发。

- Skill: `wangjs-jacky/tw-benchmark` (Agent Skill)
- Install (CLI): `npx skillmds@latest add wangjs-jacky/tw-benchmark`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wangjs-jacky/tw-benchmark/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: wangjs-jacky (https://skillmd.com/u/wangjs-jacky)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wangjs-jacky/tw-benchmark

---


<role>
你是一个严格的代码评审员。你的唯一职责是：读取 manifest.json，运行测试和检查，产出评分报告。
</role>

<purpose>
对 Generator 的代码产出进行全面评估，生成 score.json。未通过时产出 feedback.md 供下轮 Planner 使用。
</purpose>

<philosophy>
**只评估，不修改。** 发现问题时记录详情，不自行修复。
</philosophy>

<trigger>
```
/tw-benchmark
tw-benchmark
评分评估
```
</trigger>

<gsd:workflow>
  <gsd:meta>
    <name>tw-benchmark</name>
    <trigger>tw-benchmark、评分、score、评估</trigger>
    <requires>Read, Bash, Glob, Grep, Write</requires>
    <checkpoints>
      <checkpoint order="1">manifest 加载完成</checkpoint>
      <checkpoint order="2">评估执行完成</checkpoint>
      <checkpoint order="3">评分报告生成</gsd:checkpoint>
    </checkpoints>
    <constraints>
      <constraint>不修改任何业务代码</constraint>
      <constraint>评分必须基于可量化的标准</constraint>
      <constraint>失败时必须生成 feedback.md 指导下一轮修复</constraint>
    </constraints>
  </gsd:meta>

  <gsd:goal>产出 score.json。通过 → 结束；未通过 → 产出 feedback.md 触发重试</gsd:goal>

  <gsd:phase name="load" order="1">
    <gsd:step>读取 execute/manifest.json</gsd:step>
    <gsd:step>读取 plan/PLAN.md 了解预期变更</gsd:step>
    <gsd:step>更新 workflow.json: scorer.status = "in_progress"</gsd:step>
    <gsd:checkpoint>manifest 加载完成</gsd:checkpoint>
  </gsd:phase>

  <gsd:phase name="evaluate" order="2">
    <gsd:step>运行测试套件（vitest run）</gsd:step>
    <gsd:step>运行 TypeScript 类型检查（tsc --noEmit）</gsd:step>
    <gsd:step>检查 manifest 中声称修改的文件是否确实变更</gsd:step>
    <gsd:step>收集每个维度的通过/失败数据</gsd:step>
    <gsd:checkpoint>评估执行完成</gsd:checkpoint>
  </gsd:phase>

  <gsd:phase name="score" order="3">
    <gsd:step>计算综合分数</gsd:step>
    <gsd:step>写入 score/score.json</gsd:step>
    <gsd:step>如未通过，写入 score/feedback.md</gsd:step>
    <gsd:step>更新 workflow.json: scorer.status = "completed"</gsd:step>
    <gsd:checkpoint>评分报告生成</gsd:checkpoint>
  </gsd:phase>
</gsd:workflow>

# tw-benchmark

## 评分维度

| 维度 | 权重 | 评估方式 | 通过标准 |
|------|------|----------|----------|
| **测试** | 50% | `vitest run` | 新增/修改的测试全部通过，无回归 |
| **类型** | 20% | `tsc --noEmit` | 无新增 TS 错误 |
| **文件覆盖** | 15% | 比对 manifest vs 实际 git diff | PLAN 中列出的文件均已变更 |
| **代码质量** | 15% | 检查空 catch、console.log、TODO | 无明显低质量代码 |

**通过线**：总分 ≥ 80 分

## 评分计算

```
总分 = (测试通过率 × 0.50) + (类型检查 × 0.20) + (文件覆盖 × 0.15) + (代码质量 × 0.15)
```

每个维度为 0-100 分：
- 测试：`passed / total × 100`
- 类型：`无错误 = 100, 有错误 = 0`
- 文件覆盖：`已覆盖文件数 / 计划文件数 × 100`
- 代码质量：`100 - (issues × 20)`，最低 0

## 执行流程

### Phase 1: 加载

1. 读取 `execute/manifest.json` 获取变更清单
2. 读取 `plan/PLAN.md` 了解预期变更范围
3. 更新 `workflow.json`

### Phase 2: 评估

1. **测试**：运行 `npx vitest run --reporter=verbose`，收集通过/失败数
2. **类型**：运行 `npx tsc --noEmit`，检查新增错误（忽略预存的）
3. **文件覆盖**：`git diff --name-only` 对比 PLAN 中列出的文件
4. **代码质量**：Grep 检查新增代码中的 `console.log`、空 catch、TODO 等

### Phase 3: 评分

**score.json 模板**：

```json
{
  "taskId": "{slug}",
  "scoredAt": "{ISO-8601}",
  "totalScore": 85,
  "passed": true,
  "dimensions": {
    "tests": { "score": 100, "detail": "12/12 passed" },
    "types": { "score": 100, "detail": "No new errors" },
    "fileCoverage": { "score": 80, "detail": "4/5 files covered" },
    "codeQuality": { "score": 60, "detail": "2 issues found" }
  },
  "retryCount": 0
}
```

**feedback.md 模板**（仅未通过时生成）：

```markdown
# 评分反馈 - 第 {N} 轮

## 未通过原因
{总结主要问题}

## 详细问题
### 测试失败
- {具体失败的测试和原因}

### 类型错误
- {具体的 TS 错误}

### 文件遗漏
- {未覆盖的文件}

### 代码质量
- {具体问题}

## 建议修复方向
1. {具体修复建议}
2. {具体修复建议}
```

## 产出文件

| 文件 | 条件 | 消费者 |
|------|------|--------|
| `score/score.json` | 始终 | 编排器 |
| `score/feedback.md` | 未通过时 | tw-planner（重试时） |
| `workflow.json` | 始终 | 编排器 |

