Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions docs/harness/HARNESS_V2_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,28 @@ Inform(告知)与 Constrain(约束)在前后端子仓及工作区根已
- **`human_gate`**:表列 `human_gate_id`、`status`(`pending` \| `approved`)、`blocks_hats`;**仅人** 可将 `pending` 改为 `approved`;Agent 遇阻塞帽 **拒执行**。
- **`git_branch`**(建议):半自动执行所在分支名(如 `task/<slug>`),**禁止**在 `main` 上连续自动链式提交。

### 5.7 `experience_capture`(经验归纳 · 无 60 帽)

| 取值 | 含义 | 关账时 |
|------|------|--------|
| `required` | 跨 task 可复用决策/排障/流程教训 | CLOSE 须有 **经验摘要** 或链 `docs/diary/` |
| `recommended` | 建议短摘要 | 关闭回溯 ≥3 bullet |
| `not_applicable` | 无复用经验 | **须** `experience_capture_note` 一行 |

- 各帽 **Judgment** 可建议升/降档位;**22 或人** 改 task 元信息。
- 判定矩阵:[`guides/KPI_RUBRIC_v1_2.md`](guides/KPI_RUBRIC_v1_2.md) §6;关账核对:[`prompts/handoff/HANDOFF_CLOSE_TRACE.md`](prompts/handoff/HANDOFF_CLOSE_TRACE.md) §4 步骤 6。

### 5.8 `kpi_rubric` / `kpi_aggregator` / `### KPI(00)`

| 字段 | 说明 |
|------|------|
| **`kpi_rubric`** | 评分规则版本;**2026-05-31 起新建 task 必填** `KPI_RUBRIC_v1_2` |
| **`kpi_aggregator`** | 谁汇总 HatInstance 表:`CLOSE`(默认,可省略字段行)\| `00` \| `50` \| `human` |
| **`### KPI(00)`** | task 正文小节;关账前 **必填**(含 Task_KPI%、blocked 判定);公式见 KPI_RUBRIC §4 |

- **00 总调度** 可链外编排并逐帽填 HatInstance;未用 00 时由 **关账(CLOSE)** 读各帽 Judgment + 50/reinspect 填表。
- **blocked**(任一帽 D2/D5 fail)→ **不得关账**;与 `human_gate` pending、50 书面阻塞、必绿 CI 红 **并行** 硬规则。

---

## 6. 冻结点 vs 修订记录(再次落盘)
Expand Down Expand Up @@ -196,6 +218,7 @@ Inform(告知)与 Constrain(约束)在前后端子仓及工作区根已
| 2026-05-14 | §3 表后脚注 **Invoke 快照**(链 §1、`invokes/`、`prompts` 各 `TEMPLATE-*-invoke` §3);§4 **P2-6** 增补 `invokes/` 与 §1、§3 同步修订 |
| 2026-05-17 | §5.5 `audit_profile`、§5.6 `human_gate` / `semi_auto`;§0.2 链 [`handoff/HANDOFF_SEMI_AUTO.md`](prompts/HANDOFF_SEMI_AUTO.md) |
| 2026-05-30 | §5.1 本仓 TDD 实践口径;task 模板 Delta/Scenario(OpenSpec 借鉴);链 diary TDD 专项分析 |
| 2026-05-31 | §5.7 `experience_capture`、§5.8 `kpi_rubric` / `kpi_aggregator` / `### KPI(00)`;链 KPI_RUBRIC_v1_2 与 00-orchestrator |

---

Expand Down
2 changes: 2 additions & 0 deletions docs/harness/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
| 半自动 / 人工闸 | `HANDOFF_SEMI_AUTO` |
| commit / 关账 | `HANDOFF_AUTO_COMMIT`、`HANDOFF_CLOSE_TRACE` |
| task 字段 | `HARNESS_V2_PLAN.md` §5 |
| **KPI 评分 v1.2** | [`guides/KPI_RUBRIC_v1_2.md`](guides/KPI_RUBRIC_v1_2.md) · HatInstance / Task_KPI% |
| **总调度 00** | [`prompts/hats/00-orchestrator.md`](prompts/hats/00-orchestrator.md) · [`TEMPLATE-orchestrator-invoke`](prompts/templates/TEMPLATE-orchestrator-invoke.md) |
| 流程 | `SDD_HAT_FLOW.md` |
| **FAQ 改进 · 09 PLAN** | [`prompts/PROMPT_FAQ改进_09PLAN_理解_v1_zh.md`](prompts/PROMPT_FAQ改进_09PLAN_理解_v1_zh.md) |
| **冷/温/热 术语** | [`guides/GUIDE_冷温热层_对内术语_v1_zh.md`](guides/GUIDE_冷温热层_对内术语_v1_zh.md) |
Expand Down
242 changes: 242 additions & 0 deletions docs/harness/guides/KPI_RUBRIC_v1_2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
# Agent 执行任务 KPI 评分规则(v1.2)

> **状态**:`active`(2026-05-31 定稿)
> **用途**:00 总调度帽、关账轮、维护者抽检时,对 **HatInstance(帽实例)** 打分并汇总 **Task KPI%**。
> **落盘**:task 正文 **`### KPI(00)`** 表;公式与细则 **以本文件为真值**(不写死在 00 对话行)。
> **关联**:[`../prompts/00-orchestrator.md`](../prompts/00-orchestrator.md)、[`../HARNESS_V2_PLAN.md`](../HARNESS_V2_PLAN.md) §5.7–§5.8、[`../prompts/HANDOFF_CLOSE_TRACE.md`](../prompts/HANDOFF_CLOSE_TRACE.md)。

---

## 1. 术语表

| 术语 | 含义 |
|------|------|
| **hat_code** | Harness 帽编号:`00` 总调度;`10` 需求;`20` 规格短评;`22` 任务审核;`30` 执行;`40` 自检;`50` 独立复检/全局验收;`CLOSE` 关账 |
| **round** | 同帽多轮:`R1`、`R2`、`close` 等 |
| **agent_mode** | `main_chat`(总 Chat / 00)\| `task_subagent`(Cursor `Task` 派发) |
| **HatInstance** | 本 task 上某帽的 **一次执行**(KPI 表一行) |
| **50** | **帽子** `50-independent-reinspect`(独立复检),**不是**测试套件编号 |
| **返工** | **外部打回**:22 要求 R+1、50 fail 打回 30、人明确要求返工;**不含** 30 内自我修正且未落审查/复检 |
| **CI 绿** | 仅 task 列出的 **关联子仓** + workflow(对齐根 `AGENTS.md` §8) |
| **J-exp** | `experience_capture` 档位判断是否合理 |
| **J-gate** | `human_gate` / 阻塞判断 |
| **J-scope** | 范围、`freeze_id`、静默扩 scope |
| **J-evidence** | 无证据却 pass |
| **J-refuse** | 该拒开工未拒 / 该停未停 |
| **judgment_notes** | 任一大维或 J 为 warn/fail 时 **必填** 的原因说明 |

---

## 2. 大维权重(v1.2 · 合计 100%)

| 大维 | 权重 | 聚合方式(Task 级) |
|------|------|---------------------|
| **D1** 交付 | 20% | 各帽实例 **算术平均** |
| **D2** 判断 | 30% | 各帽实例 **最小值(min)** |
| **D3** 上下文 | 15% | **平均** |
| **D4** 合规 | 15% | **min** |
| **D5** 结果 | 20% | **min** |

**D2 子项权重(合成单帽 D2 前,各子项 100/60/0)**

| 子项 | 占 Task 总权重 |
|------|----------------|
| J-exp | 4% |
| J-gate | 5% |
| J-scope | 5% |
| J-evidence | 6% |
| J-refuse | 10% |

**单帽 D2 规则**:任一 J 子项 **fail** → 该帽 **D2 = fail(0)**;否则按子项加权平均后映射:≥85→pass(100);60–84→warn(60);<60→fail(0)。

---

## 3. 评分规则表(pass=100 · warn=60 · fail=0)

### D1 交付(20%)

| 等级 | 条件 |
|------|------|
| pass | 下列 checklist **全部满足**(仅勾选本 task **已执行** 的帽所要求项) |
| warn | **缺 1 项** |
| fail | **缺 ≥2 项** |

**checklist**

- [ ] task 路径有效,验收节可读
- [ ] 若走过 **40**:`### 自检结论(执行者)` 已回填
- [ ] 若走过 **22**:`reviews/task_*_audit_*.md` 存在
- [ ] 若走过 **50**:`reinspect_results/` 或 50 报告路径存在
- [ ] 该帽若要求 invoke:对应 `invokes/...` 已落盘

### D2 判断(30%)

| 等级 | 条件 |
|------|------|
| pass | J 子项 **无 fail**;warn ≤1 |
| warn | 无 fail;warn **2 项** |
| fail | **任一** J fail **或** warn ≥3 |

**J 子项判定要点(附录 A)**

| 子项 | pass | warn | fail |
|------|------|------|------|
| J-exp | 与 task 档位一致 | 建议升级/降级但理由弱 | 明显应 `required` 仍 n/a 或相反 |
| J-gate | 闸状态判断正确 | 漏标建议闸 | 代签 approved / 误闯 pending 闸 |
| J-scope | 未静默扩 scope | 边界模糊已提示 | 明显扩 scope 或漏升 freeze |
| J-evidence | 证据可定位 | 证据偏弱但已声明 | 无证据却 pass |
| J-refuse | 拒/停正确 | — | 该拒未拒或该停未停 |

### D3 上下文(15%)

| 等级 | 条件 |
|------|------|
| pass | 三项全满足 |
| warn | **1 项**不满足 |
| fail | **≥2 项**不满足 |

1. 父→子 Handoff(00→Task)正文 **≤500 字**(路径列表不计入)
2. **未**粘贴总 Chat / 30 执行过程长文
3. `worktree_root` / cwd 与 task、invoke **一致**(若已声明 worktree)

### D4 合规(15%)

| 等级 | 条件 |
|------|------|
| pass | 无严重违规;须 `approved` 的 gate 已 approved |
| warn | **1 处**轻微违规(缺 invoke 元信息、commit 未含 slug 等) |
| fail | **代签 approved**、跳过 pending 闸开工、在 `main` 上 `semi_auto` 链式提交 |

### D5 结果(20%)

| 等级 | 条件 |
|------|------|
| pass | 返工 **0**;关联子仓 **必绿 CI 全绿**;若已跑 **50**:建议合并且无阻塞 |
| warn | 返工 **1**;或 CI 有 **与本 task 无关** 的失败(须在 notes 注明) |
| fail | 返工 **≥2**;或 **本 task 关键** CI 红;或 **50 阻塞合并** |

**未跑 50 的帽实例**:D5 填 **`—`**,不参与该帽 D5;Task 级 D5 仅对已有 D5 分数的帽取 min。

---

## 4. Task 汇总

### 4.1 公式

```text
Task_KPI% = D1×20% + D2×30% + D3×15% + D4×15% + D5×20%
(各大维得分已按 §2 聚合)
```

### 4.2 状态(语义)

| 状态 | 规则 |
|------|------|
| **blocked** | **任一** HatInstance 的 **D2=fail** 或 **D5=fail**(v1.2 收紧;覆盖 KPI%) |
| **pass** | 非 blocked 且 KPI% **≥ 80** |
| **warn** | 非 blocked 且 **60 ≤ KPI% < 80** |
| **fail** | 非 blocked 且 KPI% **< 60** |

**关账硬规则(并行)**:`human_gate` pending、50 书面阻塞、必绿 CI 红 → **不得关账**,即使 KPI%≥80。

### 4.3 task 落盘表(模板)

```markdown
### KPI(00)

**rubric**: KPI_RUBRIC_v1_2 · **汇总**: {KPI%} · **状态**: pass|warn|fail|blocked · **帽**: …

| hat_code | round | agent_mode | D1 | D2 | D3 | D4 | D5 | judgment_notes |
|----------|-------|------------|----|----|----|----|-----|----------------|
| … | … | … | … | … | … | … | … | … |

**blocked 原因**:(若有)
```

**judgment_notes**:任一大维或 J 为 warn/fail → **必填**。

---

## 5. 版本迁移(v1.1 → v1.2)

| 变更项 | v1.1 | v1.2 |
|--------|------|------|
| D1 / D5 权重 | 25% / 15% | **20% / 20%** |
| D2 子项 | 均分 6% | **J-refuse 10%**,其余见 §2 |
| blocked | 仅 22/50 的 D2/D5 fail | **任一帽** D2 或 D5 fail |
| Task 维聚合 | 全算术平均 | **D2/D4/D5=min**;D1/D3=平均 |
| Task 状态阈值 | 仅 blocked 覆盖 | **+ pass≥80 / warn 60–79 / fail<60** |
| 经验归纳 | 未纳入 | **`experience_capture`** + Judgment(**无 60 帽**) |

**存量 task 适配(1 条)**

- **已关账、无 `### KPI(00)`**:**不强制重算**;新关账或 **`00` 复盘中** 的任务从 v1.2 起算。
- **进行中 task**:在下次 **50 或 CLOSE** 前补写 KPI 表;`rubric` 标 `KPI_RUBRIC_v1_2`。
- 若需对比历史,在 notes 注明「按 v1.1 估算,仅供参考」,**勿**与 v1.2 百分比直接排名。

---

## 6. 完整计算示例(虚构 task · 含 30/40/50)

**背景**:`task_demo_api_fix_v1` · 已跑 30→40→50 · 50 建议合并,J-exp 建议升 `experience_capture: required`。

### 6.1 HatInstance 得分

| hat_code | round | agent_mode | D1 | D2 | D3 | D4 | D5 | judgment_notes |
|----------|-------|------------|----|----|----|----|-----|----------------|
| 30 | R1 | task_subagent | 100 | 100 | 100 | 100 | — | — |
| 40 | R1 | task_subagent | 100 | 100 | 100 | 100 | — | — |
| 50 | close | task_subagent | 100 | 60 | 100 | 100 | 100 | J-exp warn: 同类排障将复现,建议 task 升 required;见 reinspect §3 |

**50 的 D2=60 推导**:J-exp warn(+ 其余 J pass)→ D2 整体 warn → 60。

### 6.2 Task 各大维聚合

| 大维 | 计算 | 得分 |
|------|------|------|
| D1 | avg(100,100,100) | **100** |
| D2 | min(100,100,60) | **60** |
| D3 | avg(100,100,100) | **100** |
| D4 | min(100,100,100) | **100** |
| D5 | min(—,—,100) → 仅 50 有分 | **100** |

### 6.3 Task_KPI% 与状态

```text
Task_KPI% = 100×20% + 60×30% + 100×15% + 100×15% + 100×20%
= 20 + 18 + 15 + 15 + 20 = 88%

blocked:无(50 的 D2 为 warn 非 fail)
状态:pass(88 ≥ 80)
```

### 6.4 与 `experience_capture` 联动

- task 原为 `recommended` → 50 + Judgment 建议升 **required** → **22 或人** 改 task 元信息后再关账;CLOSE 核对 [`HANDOFF_CLOSE_TRACE.md`](../prompts/HANDOFF_CLOSE_TRACE.md) §6。

### 6.5 反例(blocked)

若 50 的 **D5=fail**(阻塞合并):

```text
blocked = 是(50 · D5 fail)
→ 忽略 KPI%,不得关账,须回 30
```

---

## 7. 维护者 rsync(子仓执行真值)

工作区改本文件及 `00` / 模板后,在 **`Projects/` 根** 按需同步至 `ai-ink-brain-api-python/docs/harness/`(**禁止**整目录覆盖)。清单见 [`RSYNC_PROMPTS_TO_API_PYTHON.md`](RSYNC_PROMPTS_TO_API_PYTHON.md)。

---

## 修订记录

| 日期 | 摘要 |
|------|------|
| 2026-05-31 | v1.2:初版定稿 + §6 演算示例 + §5 迁移 |

## 给 Cursor

`KPI_RUBRIC_v1_2`、`00-orchestrator`、`HatInstance`、`judgment_notes`、`blocked`、`experience_capture`、`D1`、`D2`、`J-exp`、`J-refuse`
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Invoke 快照 · 00 总调度 · harness-kpi-v1-2-pilot

| 字段 | 值 |
|------|-----|
| hat_id | 00 |
| task_slug | harness-kpi-v1-2-pilot |
| task_path | docs/tasks/active/task_harness_kpi_v1_2_pilot_v1.md |
| git_branch | KPI_RUBRIC_v1_2 |
| kpi_rubric | KPI_RUBRIC_v1_2 |
| kpi_aggregator | 00 |
| planned_hats | 22,30,40,50,CLOSE |
| date | 20260531 |

---

## §3 调用体(快照)

```text
你正在扮演 Harness「总调度帽(00)」,严格遵循:
- docs/harness/prompts/hats/00-orchestrator.md
- docs/harness/guides/KPI_RUBRIC_v1_2.md
- docs/harness/prompts/handoff/HANDOFF_SEMI_AUTO.md
- docs/harness/prompts/handoff/HANDOFF_CLOSE_TRACE.md
- docs/tasks/skills/SKILL-harness-task.md

输入:
- task:docs/tasks/active/task_harness_kpi_v1_2_pilot_v1.md
- slug:harness-kpi-v1-2-pilot
- 计划帽序列:22,30,40,50,CLOSE
- git_branch:KPI_RUBRIC_v1_2
- kpi_rubric:KPI_RUBRIC_v1_2
- kpi_aggregator:00

你必须完成:
1. 将 task 状态改为 in_progress;通读 task 元信息与 human_gate。
2. 维护阶段状态表:每帽 {pending|running|done|blocked}。
3. 开帽落盘:本消息全文 → docs/harness/invokes/by-task/harness-kpi-v1-2-pilot/invoke_YYYYMMDD_00_harness-kpi-v1-2-pilot.md,commit。
4. semi_auto 同会话派 22→30→40(各帽 invoke + Judgment;00 逐帽记 HatInstance)。
5. 50 提示用户新会话执行;收回报后继续。
6. 关账:写 task「### KPI(00)」+ experience 摘要 + CLOSE_TRACE;HG-REINSPECT 仍 pending 则停、不 merge。

禁止:代签 HG-REINSPECT;无 ### KPI(00)关账;在 main 上链式提交。

Judgment(00 · 末尾):
- experience_capture: …
- gate/risk: HG-REINSPECT pending → merge 前须人签
- hat_self: pass | pass-with-notes | blocked
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Invoke 快照 · 22 任务审核 · harness-kpi-v1-2-pilot

| 字段 | 值 |
|------|-----|
| hat_id | 22 |
| task_slug | harness-kpi-v1-2-pilot |
| task_path | docs/tasks/active/task_harness_kpi_v1_2_pilot_v1.md |
| git_branch | KPI_RUBRIC_v1_2 |
| audit_round | R1 |
| date | 20260531 |

---

## §3 调用体(快照)

```text
你正在扮演工作区 Harness「任务审核帽」,严格遵循:
- docs/harness/prompts/hats/22-task-audit.md
- docs/harness/reviews/README.md
- docs/harness/HARNESS_V2_PLAN.md §5

上一帽已结束;本帽只按下文执行。

输入:
- 待审 task 路径:docs/tasks/active/task_harness_kpi_v1_2_pilot_v1.md
- 关联 SPEC:无
- 上一轮审查:无
- 落盘:docs/harness/reviews/by-task/harness-kpi-v1-2-pilot/task_harness_kpi_v1_2_pilot_audit_R1_20260531.md

你必须完成:
0. 本 invoke 已落盘;审查 md 须链 invoke_snapshot。
1. 通读 task 元信息(experience_capture、kpi_aggregator、human_gate、test_strategy)。
2. 对照理论对齐检查表;运行 harness_task_validate.py。
3. 落盘 R1 审查(零阻塞或阻塞清单)。
4. 有下一棒 → 输出 30 invoke 路径;禁止代签 HG-REINSPECT。
5. commit 本轮路径。

Judgment(22 · 末尾):
- experience_capture: 维持 required(试点须留 KPI/00 经验)
- gate/risk: HG-TASK-DRAFT/HG-AUDIT-R1 approved;HG-REINSPECT pending 不阻塞 30
- hat_self: pass
```
Loading