Skip to content

Commit 507b53c

Browse files
docs(qa): start QA rounds on the maintainer's word and add the scenario half (#31489)
<!-- claude-projects-attribution: {"github_login":"zhuangjianguo"} --> _Requested by **Steedos** · [project thread](https://claude.ai/code/project/chan_018ETKaNwMZCNRYD7D8Q9Ubb?thread=cmsg_018ETKaNwMZCNRYD7D8Q9Ubb9R81zJBEnwtS9WxYnDKFP7)_ Fixes #31434 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:QA 席不再按每周定时跑,改为你说「一波开发完了」才开一轮;每轮在清单回归之外加跑场景库的 `starter` 卡(用本仓未发布的包)。 - 为什么改:照你在 QA 席会话里的两句裁决「也不需要每周跑,一波开发完了,我会和你说」与「纳入,本轮一起跑,立卡交 skills 车道」。 - 风险与回滚:只改三份内部规则文本,不动任何脚本、选择器(`owed:weekly` 原样)或产品代码;回滚即 revert 本 PR。 - 先看:`.claude/skills/pm-dispatch/references/lanes/qa.md`(〈每轮〉新增四行场景半边)、`.claude/skills/checklist-test/SKILL.md` §6、`lanes/skills.md` 第 25 行。 - 两分钟验证:`pnpm check:pm-skill-ratchet`,预期三份文件行数都在上限内、全绿(qa.md 29/29,SKILL.md 279/279,skills.md 32/33)。 - 需要你做的:无,席位落地(Tier S,契约复审归总监席)。 ## What changes - `lanes/qa.md` 〈座位与唤醒〉: the weekly Routine fire is gone; a round opens when the maintainer says a development wave is done, and a post-release round still runs the npm smoke. The "first round, then every fire" line is removed (its content is the next section's first line). - `lanes/qa.md` 〈每轮〉: the scenario half, four lines: the `starter` cards of `docs/qa/scenarios` with `--modes scratch --packages workspace` (a wave is unreleased); one card per command (`--only ID`, the 2-hour background cap) and at most two in parallel per container, citing `packages/qa/scenarios/README.md` 〈Running the cards in a Claude Code cloud session〉 for the subscription `oauth_token` login, the two API variables left unset and a permission mode other than Auto (named, not restated); the scorecard goes in the round report, not a `qa-run` record; a failing half judged a product defect is extracted like a checklist `fail`, its `QA-source:` line pointing at the round. - `lanes/qa.md` 〈边界〉: a QA wave (release-candidate full run, maintainer-named target) stays maintainer-triggered and distinct from the wave-end rounds; the seat runs the section 6 routines plus the scenario half. - `checklist-test` section 6 points at `lanes/qa.md` for when a round opens (one written copy of the cadence); "weekly / last week" become "routine / last round" in section 6 and in retest trigger 4 of section 5. - `lanes/skills.md` line 25: the section 6 routines and the scenario half run per development wave and are not a QA wave. Line budget, paid inside each file (no re-wrap): `qa.md` 29 → 29 (four scenario lines paid by deleting the first-round line, folding the `retest-owed` line into the four-record line, and replacing the three restated section 5 lines on closing and Supersede with one pointer); `checklist-test/SKILL.md` 279 → 279; `lanes/skills.md` 32 → 32. Every changed line is at most 120 bytes. Facts checked against `main` before writing: the six `starter` cards are the top-level `tier` of `asset_lifecycle`, `leave_balances`, `order_to_cash`, `requisition_to_receipt`, `service_desk` and `travel_expense`; `--only`, `--modes scratch` and `--packages workspace` are parsed in `packages/qa/scenarios/src/runner/cli.ts`; the API-billing refusal is `API_BILLING_ENV` in `driver.ts`. No script reads `owed:weekly` (`git grep` hits only the two rule files), so no selector moves. ## Why The maintainer's two rulings quoted above, recorded on the card. ## Verification 17 derived gates on head `7d0c77e4`, every one exit 0, reconciled with `dispatch-gates --ran` (17 derived, 17 run, 0 NOT-MEASURED); after merging `main` (head `d983bdef`, no overlap with these files) `check:pm-skill-ratchet` and `check:pm-skill-id-lint` re-ran, exit 0. <details><summary>Gate commands</summary> ```text node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/pm/check-harness-current.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-skill-id-lint :: exit 0 pnpm check:pm-skill-ratchet :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:skill-frame-sync :: exit 0 pnpm check:watch-hint-literal :: exit 0 ``` </details> ## Acceptance notes - `skip-changeset`: `.claude/**` only, nothing publishes. - Governed surface `.claude/**` (Tier S): lands on a contract-review record for the current head. ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (n/a) - [x] 2. Every name I added uses the casing for its kind. (n/a) - [x] 3. No formatter ran; `pnpm lint` passes. (no code) - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (publishes nothing) - [x] 6. `packages/spec` touched: its generated artifacts are regenerated and committed. (n/a) - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- _Generated by [Claude Code](https://claude.ai/code/session_01QsR2jUgpaxRFL1ara3J4y8)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 2ae3e30 commit 507b53c

3 files changed

Lines changed: 17 additions & 17 deletions

File tree

‎.claude/skills/checklist-test/SKILL.md‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ QA-source: #运行记录号 · area.item · 条款
234234
单 —— 与跨仓联动同一纪律:第一产者是接受座位。安全加固没有卡:落地它的 PM 会话自
235235
己重跑该项,⛔ 不在任何卡上点名它。
236236
3. **维护者点名目标**。
237-
4. **常驻回归**(维护者所定,§6)⇒ 每周回归与发版后 npm 冒烟。
237+
4. **常驻回归**(维护者所定,§6)⇒ 例行回归与发版后 npm 冒烟。
238238

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

@@ -244,16 +244,16 @@ QA-source: #运行记录号 · area.item · 条款
244244

245245
## 6. 常驻回归 —— 两次发版之间也重跑
246246

247-
维护者所定的两条例行(裁定评论 6501246005)归 QA 席 `qa#1`(pm-dispatch `lanes/qa.md`);其定时任务
248-
由维护者为该席建,⛔ 不是仓库代码,也不是合并门禁。
247+
维护者所定的两条例行(裁定评论 6501246005)归 QA 席 `qa#1`;何时开轮只见 pm-dispatch `lanes/qa.md`,
248+
⛔ 本节不另写节奏;例行不是仓库代码,也不是合并门禁。
249249

250-
- **每周回归**,对 `main` HEAD,四张 `qa-run` 记录,一个选择器一张:
250+
- **例行回归**,对 `main` HEAD,四张 `qa-run` 记录,一个选择器一张:
251251
- 欠测清单:标题选择器写 `owed:weekly`(⛔ 不带冒号的词会被读成区),清单里每个 id
252252
按 §0 裸 id 逐项解析;
253-
- `touched:<上周 touched 记录的 subject sha>`;首周取最近一张发版全量重跑记录的 subject;
253+
- `touched:<上轮 touched 记录的 subject sha>`;首轮取最近一张发版全量重跑记录的 subject;
254254
- `priority:P0` 与 `surface:api`。
255-
§5 的 Supersede 让每条例行至多开着一张:选择器周周相同的三张直接适用;`touched:` 的 sha
256-
每周都变,本周那张照样 supersede 上周那张,判定结转照 §5。
255+
§5 的 Supersede 让每条例行至多开着一张:选择器轮轮相同的三张直接适用;`touched:` 的 sha
256+
每轮都变,本轮那张照样 supersede 上轮那张,判定结转照 §5。
257257
- **发版后 npm 冒烟**:每次发布后跑 `smoke:npm-<版本>`,形状照上一张同类记录;上一轮冒烟抽出
258258
的修复卡在这里重判(它们的溯源行见 §5 的冒烟例外)。
259259
- **欠测清单**由 `node scripts/qa/retest-owed.mjs` 只读算出(⛔ 不写 GitHub):

‎.claude/skills/pm-dispatch/references/lanes/qa.md‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,26 @@
44
## 座位与唤醒
55

66
- 席位 `qa#N`,首席 `qa#1`;签名、座位贴、信箱同他席;无 `domain:*` 标签、无 `pm:queue`。
7-
- Routine 席:维护者在 Routines UI 建每周 fire,发版后敲一轮;⛔ 本席不自建、不改频率。
7+
- 维护者说一波开发完了才开一轮,发版后另敲一轮冒烟;⛔ 本席不自启、不建定时任务。
88
- 发版只认维护者一句或总监席摘要的新 tag 族读数;⛔ 不自判发版。
9-
- 开席首轮:先 `retest-owed.mjs`,再立第一张 `owed:weekly` 记录;此后每 fire 一轮。
109

1110
## 每轮
1211

13-
- 首动作 `node scripts/qa/retest-owed.mjs`(只读);欠测 id 即本轮 `owed:weekly` 记录的范围。
14-
- 每周回归照 §6 四张:`owed:weekly`、`touched:` 上周 subject、`priority:P0`、`surface:api`。
12+
- 先 `retest-owed.mjs`,再照 §6 四张:`owed:weekly`、`touched:` 上轮 subject、`priority:P0`、`surface:api`。
1513
- 发版后 `smoke:npm-<版本>` 照 §6;上轮冒烟抽出的修复卡在此重判。
14+
- 场景半边跑 `docs/qa/scenarios` 的 `starter` 卡:`--modes scratch --packages workspace`(开发波未发布)。
15+
- 一卡一命令 `--only ID`(后台限 2 小时),每容器至多两条并行;照 `packages/qa/scenarios/README.md`。
16+
- 其〈Running the cards in a Claude Code cloud session〉:订阅 `oauth_token` 登录、无 API 变量、非 Auto。
17+
- 计分卡进轮次记录(非 `qa-run`);失败半边判为产品缺陷 ⇒ 照 `fail` 抽卡,`QA-source:` 指本轮。
1618
- 执行照 checklist-test 与 RUNNER;本席即派 runner 的会话,runner 的安全复现私报本席。
17-
- 每张记录当轮照 §5 收口:四分法处置、收口评论机器行、抽取卡带 `QA-source:` 行。
18-
- 收口完即关记录 `completed`,一行指向收口评论;遗留项留在各自卡上,⛔ 不为等修复开着。
19-
- 新记录覆盖旧地面 ⇒ 先结转、再关旧记录,照 §5 Supersede 协议。
19+
- 每张 `qa-run` 记录当轮照 §5 收口、关闭与 Supersede;⛔ 不为等修复开着。
2020
- 轮末 `node scripts/qa/qa-rollup.mjs` 读开着的 `qa-run` 数;非零逐张点名欠什么,进轮次记录。
21-
- 每轮记花费行(环境准备与测试墙钟、runner 花费);三周读数进座位贴,频率由维护者定。
21+
- 每轮记花费行(环境准备与测试墙钟、runner 与场景半边花费);三轮读数进座位贴。
2222

2323
## 边界
2424

2525
- ⛔ 不派 `os-dev`、不改产品代码、不开 PR;§3 清单修订同断言缺陷立卡交该项车道。
2626
- 抽出的缺陷卡照常进分诊首触,⛔ 不定级、不入队;安全发现只照 `../security-findings.md`。
27-
- 波次(发版候选全量、维护者点名目标)仍由维护者手动触发;本席只跑 §6 两条例行。
27+
- QA 波次(发版候选全量、维护者点名目标)另由维护者触发;本席只跑 §6 例行与场景半边。
2828
- 技能文本归 `domain:skills`、RUNNER 归 `domain:devx`;本席见文本问题以 `finding` 报,⛔ 不自改。
2929
- GitHub 写只走 checklist-test §4 写入门;推维护者只限需其出手,⛔ 无周报聊天表。

‎.claude/skills/pm-dispatch/references/lanes/skills.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
- finding 归分诊首触,自分诊见 `triage-duties.md`;可附证据与「Instruments serve the fleet」答案。
2323
- 「Instruments serve the fleet」答不出的 finding ⇒ 建议 p3 或不做,⛔ 不自入队;定级归分诊。
2424
- 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write 加回读。
25-
- QA 波次由维护者手动触发,⛔ 不自启;checklist-test §6 两条例行按期由 `qa#1` 跑,不是波次。
25+
- QA 波次由维护者手动触发,⛔ 不自启;`qa#1` 的 §6 例行与场景半边逐开发波跑,不是波次。
2626

2727
## 席内判断
2828

0 commit comments

Comments
 (0)