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
10 changes: 7 additions & 3 deletions .claude/skills/checklist-test/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -88,7 +88,7 @@ node scripts/checklist-select.mjs <selector> --json
运行发现该项的 `steps` 写错了(路由搬家、键改名、过期路径还需要清 localStorage)——
这是清单在起作用。那是一次清单**编辑**:在 **worktree** 里做(PD#11):修订该项、递
增 `revision`、追加一条 `history`、保持 `node scripts/check-platform-checklist.mjs`
绿,落在任务分支上。运行中发现的产品缺陷进 `FOLLOW-UPS.md`(或立成 issue),作为
绿,落在任务分支上。运行中发现的产品缺陷按 §4 收束抽取成独立卡;条款侧可记
expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。

## 4. 结果 issue —— 一次运行一张 GitHub issue,纯文本
Expand All@@ -103,8 +103,8 @@ expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。
用 `issue_write`(github MCP)立单:

- **标题** —— `QA run · <selector> · <framework-sha[:8]> · <date>`
- **标签** —— 恒带 `qa-run`;任何条款失败就加 `bug`(P0/P1 再加 `regression`),让
真实缺陷直接从运行 issue 可分诊,不必再立第二张
- **标签** —— 只带 `qa-run`,⛔ 不挂 `bug`/priority 等工作标签:run 记录是协议载体、
不入分诊 sweep,⛔ 不是可派发单元;工作标签随抽取出的缺陷卡走(RUNNER 抽取义务条款)
- **正文**,按此顺序:
- **环境指纹** —— framework sha、`.objectui-sha`、端口、db、seed、时间戳。
- **范围** —— 选择器 + 每项所对的 `revision`。
Expand All@@ -114,6 +114,10 @@ expected-fail 探针 —— 永不在真实缺陷上把条款打成绿。
body)/ ref 定位的 selector 路径,足以在全新启动上重新命中,外加 oracle 的
expected-vs-actual。足够让人或全新 agent 不靠你的截图复现。
- 派生的整项判定 + fixture 缺口清单(如有)。
- **收束抽取(RUNNER 抽取义务条款)** —— 运行中发现的每个产品缺陷,收束报告时逐个抽
取为独立 issue:标题自含、复现与机制条目化、指回本 run issue 取全量证据;缺陷卡不
挂 `qa-run`,正常进分诊首触。清单准确性发现与 fixture 缺口归波次锚卡(sweep 跟踪
issue)收口,⛔ 不抽取;环境阻塞记录在案即可。

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

Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/pm-dispatch/SKILL.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -255,7 +255,7 @@ of record)。**读侧闭环(维护者 2026-08-12 批准):接管与巡检只读
仓没有车道标签,这形状是它们队列卡的常态);③ 有 `domain:*` 无 pm-state。②③ 只取 `updated_at`
早于 ~2 分钟的卡且不是可选项 —— 半标注卡是协议自己按设计生产的(一次标签写入即把老卡打成半标
注),只带路由或状态机其一的卡对两个视图同时不可见。排除:`tracking`、`status:parked`(其正常形
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴;存量大时每轮限量、优先最新。**紧急卡直接分诊**
状恰是「带域标签无 pm-state」)、全部 `pm:seat` 贴、`qa-run` 记录(协议载体非工作);存量大时每轮限量、优先最新。**紧急卡直接分诊**
(维护者 2026-08-13):维护者点名或 p0 嫌疑 ⇒ 立即起 `claude-fable-5` 分诊子代理,不等 Routine 班
次;授权面 = 分诊本身(定级/路由/标签/既有评论格式),⛔ 不写码不认领;产出落卡,与 Routine 分诊同格式同效力(细则见 `references/dispatch-runbook.md`)。
**跨仓 pin 链的窗口级兜底也在本 sweep**(联动单第一产者仍是接受座位;⛔ 只立单不执行 bump):
Expand Down
3 changes: 2 additions & 1 deletion docs/qa/platform-checklist/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -281,7 +281,8 @@ smoke) ∪ any item whose `source` cites a PR in the release. The tracking issue
sweep links here and hosts discussion; results stay OUT of the repo — every run files
one `qa-run` GitHub issue as its record (text only: the verdict table + a reproduction
rule per failure, never screenshots; `runs/` is git-ignored), and a run that finds a real
regression carries the `bug` label so it triages straight from that issue. Item text,
regression extracts it into its own standalone card at close-out (RUNNER.md, extraction
obligation — the run issue itself stays `qa-run`-only, excluded from triage). Item text,
fixtures learned, and new traps discovered flow **back into the ledger** as revisions —
that is the accumulation the one-off checklists never had.

Expand Down
28 changes: 23 additions & 5 deletions docs/qa/platform-checklist/RUNNER.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,9 +52,9 @@ test-run output the clause's `evidence` field names.
— the vendored `/_console` bundle may be stale (skill §2);
- then capture the **reproduction rule** — ordered steps / API calls (method · path ·
body) / the ref-targeted selector path + expected-vs-actual — into the run's result
issue, which is labeled `bug`. A `fail` with no reproduction rule in its issue is not
a completed verdict. (The screenshot that convinced you is a live judgment aid, not
report content — describe what it showed in one line; never attach it.)
issue. A `fail` with no reproduction rule in its issue is not a completed verdict.
(The screenshot that convinced you is a live judgment aid, not report content —
describe what it showed in one line; never attach it.)
3. **Classify blockers honestly.** Missing seed/persona/fixture → `blocked(fixture)`,
and *record the gap on the item* (`fixtures.knownGaps` or `blocked`) so the next
sweep doesn't rediscover it. A defect in the fixture itself (seed silently failing,
Expand DownExpand Up@@ -114,8 +114,8 @@ contradicts it, and correct it here when it does.
## Run records — the GitHub issue is the report

Every completed run — **pass or fail alike** — files **one GitHub issue** as its durable
record, labeled `qa-run` (plus `bug` when any clause failed). **Nothing lands in the
repo** — not the JSON, not screenshots; `runs/` is git-ignored except its README.
record, labeled `qa-run` and nothing else (extraction obligation below). **Nothing lands
in the repo** — not the JSON, not screenshots; `runs/` is git-ignored except its README.

**The issue is text only.** Screenshots and DOM dumps are oracles you consult *live* to
reach a verdict — never report artifacts. What the report carries for a defect is the
Expand DownExpand Up@@ -158,3 +158,21 @@ per-clause verdict table (text oracle evidence) · a reproduction rule per `fail
derived item verdicts + fixture gaps. The durable, version-controlled truth is still the
checklist under `areas/`; a run is a dated assertion about one build, and it lives in its
issue, not the tree.

### Extraction obligation — the run record is a protocol carrier, not work

Run issues are excluded from the PM's backlog sweep, same class as the `pm:seat` post
(maintainer ruling, 2026-08-17: 「把 qa-run 加进 sweep 排除清单 —— run 记录和 pm:seat
贴同类:协议载体,不是工作」). Nobody fishes a run record for dispatchable work — so
closing out the report includes the extraction, owed by the runner:

- **The run issue carries run evidence only.** It is ⛔ not a dispatchable unit, and it
⛔ never carries work labels (`bug`, priority, …) — work labels ride the extracted
cards.
- **Product defects found during the run**: at close-out, extract each one into its own
standalone issue — self-contained title, reproduction and mechanism itemized in the
card, a pointer back to the run record for the full evidence chain. A defect card does
not carry `qa-run`; it enters triage first-touch normally.
- **Checklist-accuracy findings and fixture gaps** close out through the wave's anchor
card (the sweep's tracking issue) — ⛔ not extracted.
- **Environment blockers**: recorded in the run record is enough.
7 changes: 4 additions & 3 deletions docs/qa/platform-checklist/runs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,9 +14,10 @@ durable, **text-only** report (pass or fail alike):
- the issue **body** hosts the per-clause verdict table (pass / partial / fail / blocked)
and the scope — the selector that chose the items + the `revision` each ran against;
- **every `fail` carries a reproduction rule** in that same issue — ordered steps / API
calls (method · path · body) / the ref-targeted selector path + expected-vs-actual —
and the issue gains the `bug` label (a real regression may additionally get its own
linked issue) so it triages straight from the run;
calls (method · path · body) / the ref-targeted selector path + expected-vs-actual;
the run issue itself stays `qa-run`-only (protocol carrier, excluded from the triage
sweep) — at close-out each product defect is extracted into its own standalone card
(RUNNER.md, extraction obligation), and that card is what triages;
- **screenshots are never part of the report** — they are live judgment aids that die
with the run environment, described in one line of text, never attached or linked.

Expand Down
Loading