Skip to content
Merged
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
71 changes: 70 additions & 1 deletion .claude/skills/checklist-test/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,9 @@ expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。
那个分数是标题的一部分,不是可选装饰。
- **标签** —— 只带 `qa-run`,⛔ 不挂 `bug`/priority 等工作标签:run 记录是协议载体、
不入分诊 sweep,⛔ 不是可派发单元;工作标签随抽取出的缺陷卡走(RUNNER 抽取义务条款)。
**这条在记录的整个生命周期成立** —— 收口与关闭时同样不补挂。实测漂移形态:记录事后
被补上 `tests` / `tracking` / `bug`,每一个都把协议载体推回排除清单本要挡住的
sweep。
- **正文**,按此顺序:
- **环境指纹** —— framework sha、`.objectui-sha`、端口、db、seed、时间戳。
- **范围** —— 选择器 + 每项所对的 `revision`。
Expand All@@ -139,13 +142,79 @@ expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。
- **收束抽取(RUNNER 抽取义务条款)** —— 运行中发现的每个产品缺陷,收束报告时逐个抽
取为独立 issue:标题自含、复现与机制条目化、指回本 run issue 取全量证据;缺陷卡不
挂 `qa-run`,正常进分诊首触。清单准确性发现与 fixture 缺口归波次锚卡(sweep 跟踪
issue)收口,⛔ 不抽取;环境阻塞记录在案即可。
issue)收口,⛔ 不抽取;环境阻塞记录在案即可。逐条 `fail` 的四分法处置、收口评论的
机器行与抽取卡的溯源行见 §5。
- **完成判据** —— 一个区只有在**每一项都有判定**时才算跑完。跑不完的一轮照常立单:
交出已有的判定,**外加一份点名未触达项的交接清单**,标题按上面的分数如实写。
`not-run` 是诚实判定;在 11 项 not-run 之上写 `(FULL area)` 不是。

同一份逐条款表 + 环境准备与测试的耗时之比,回报给维护者(chat),并链接已立的 issue。

## 5. 收口 —— 一张 `qa-run` 记录什么时候才算关闭

立单不是终点,收口是每一轮运行的一部分。RUNNER 的抽取义务条款给的是**抽什么**;本节
给的是**一张记录什么时候才算关闭**,以及关闭这件事在别处怎么被读到。零新标签 —— 下面
每个状态都用现有载体承载。

**开着的 `qa-run` 数 = 未清的收口债**,与裸 `finding` 计数同一构造:它是可直接读的健
康指标,所以⛔ 永不靠关掉记录让它变好看,只靠把下面几件事做完。

**每个 `fail` 落一个四分法处置**,判据是这份记录自己的证据,不是记忆:

| 处置 | 判据 | 动作 |
|---|---|---|
| **产品缺陷** | 被测能力的行为违背它自己声明的契约 | 抽取独立缺陷卡(§4 抽取条款):先查重、立在**修复落地的仓**、⛔ 不挂 pm 标签,正常进分诊 |
| **断言缺陷** | 产品是对的,测试项的 `steps` / `acceptance` 写错了 | 在**拥有该测试项的仓**立 test-fix 卡;条款侧修订照 §3 |
| **过期规格** | 两边都按各自的声明行事,条款钉的是已被裁决改掉的旧形状 | 立 re-point 卡:把条款重新指向现行规格,引裁决 |
| **配对无效** | 该项与这个 subject / fixture 根本不成立(错配的 revision、不适用的环境) | 记 `blocked` 说明,⛔ 不立卡 |

四选一是**穷尽的**:落不进任何一格的 `fail` 说明你还没判完 —— ⛔ 永不把它留成一条无处
置的红行。

与 §4「清单准确性发现归波次锚卡」的分界,是**有没有一条 `fail` 要清**:由 `fail` 判出
的断言缺陷 / 过期规格各自立卡(那条红行得有人负责变绿),运行中顺带看到的清单准确性问
题仍归锚卡收口,⛔ 不抽取。

**`partial` 的覆盖缺口点名,永不丢**:要么按区立 pin 升级卡(把该区缺 `automated.ref`
的项钉起来),要么挂到波次锚卡上。`not-run` 由 §4 的完成判据兜底(交接清单),⛔ 不另
起第二份清单。

**收口评论是机器可 grep 的** —— 一条一行,落在记录 issue 的收口评论里:

```text
Extracted: #缺陷卡号 · area.item · 条款
Parked-on: #锚卡号 · 缺口
Superseded-by: #新记录号
Carried-forward: #旧记录号 · area.item · 判定
```

**抽取出的每张卡,正文带一行溯源**(靠 grep,不靠标签):

```text
QA-source: #运行记录号 · area.item · 条款
```

上面两处的定位字段一律是 §0 的**裸 id 形式 `area.item`**(如
`platform-core.console-login`)—— 解析器、run 记录的逐条款表、抽取卡三处同一把定位
符,才互相 grep 得到;⛔ 不写只有 item 段的短形。**写进 GitHub 正文/评论时⛔ 不要用尖
括号占位符**:`<`+字母会被写入层当标签吃掉,一行溯源就此消失在库里 —— 占位用中文词或
直接填实值。

**Supersede 协议** —— 重跑覆盖了旧记录的地面时,旧记录关闭(`not_planned` + 一行
`Superseded-by:` 指向新记录),但**先把新一轮没有重新判定的判定结转过去**:结转行
(`Carried-forward:`,引旧记录号)落在**新记录**上,supersede 行落在**旧记录**上。⛔
永不用「新的一轮跑过了」直接关掉旧记录:没被重新覆盖的判定会随它一起消失,而记录被关
闭这件事在别处不留任何痕迹。

**重测触发,三条且只有三条**:

1. **发版候选** ⇒ 完整 Tier 1 重跑(§1 的分层)。
2. **QA 抽取的修复卡落地** ⇒ **接受该卡的座位**把受影响的项追加到波次锚卡的重测清
单 —— 与跨仓联动同一纪律:第一产者是接受座位。
3. **维护者点名目标**。

⛔ 其它一切都不是重测触发:凭手感「再跑一遍」只增加收口债,不增加覆盖。

## Guardrails

- **不伪造覆盖。** 缺 fixture → `blocked(fixture)` 带理由;console 没构建 → 构建它
Expand Down
Loading