Skip to content

Commit 21070a2

Browse files
docs(qa): a verification re-run files no qa-run record; sweeps still file one per run (#24302)
Fixes #24173 Clause-②: no Docs-only follow-up to maintainer ruling **C** on #24127 (ruling record `6230593290`, the maintainer's choice verbatim: 「C 有问题才开卡 (Recommended)」). The checklist-test skill half merged as `b0fe9fad47` (#24172). Three `domain:devx` documents that the skill tells its runner to read first still said that **every** completed run files a `qa-run` issue. A runner that obeyed them would file the record the ruling says not to file. ## What changes (three record-filing sentences, nothing else in those files) | File | Before | After | |---|---|---| | `docs/qa/platform-checklist/RUNNER.md` (Run records, first paragraph) | 「Every completed run — **pass or fail alike** — files **one GitHub issue** …」 | Every completed **sweep run** (a release candidate, an area or `all` run, or a maintainer-named target) files one `qa-run` issue. **A verification re-run files none**: a run whose trigger is the same PR's ledger edit of that item. Its per-item verdict table goes in the PR body, and the item's `history` row carries the PR as its `ref`. A `partial` / `blocked` gap goes in the PR body and in `fixtures.knownGaps`. A product-defect `fail` is still extracted as its own card, pointing at the PR. A stale clause is fixed in the same diff. The sentence points at `.claude/skills/checklist-test/SKILL.md` §5, 「验证重测」. | | `docs/qa/platform-checklist/runs/README.md` L11–12 | 「every completed run files one `qa-run` GitHub issue」 | Every completed sweep run (same three kinds) files one. A verification re-run files none: its evidence is the PR body and the item's `history` row, and a `partial` / `blocked` gap also goes in `fixtures.knownGaps`. It defers to RUNNER.md, Run records, for the full exception. The list lead-in becomes "A sweep's record:". | | `docs/qa/platform-checklist/README.md` (How a release sweep works) | 「every run files one `qa-run` GitHub issue」 | 「every sweep run files one」, plus one sentence after it: a verification re-run (triggered by the same PR's ledger edit of that item) files no record, and its evidence is the PR body and the item's `history` row (RUNNER.md, Run records). | Unchanged, per the card's boundary: RUNNER.md's title grammar (「The record title」), its label discipline (`qa-run` and nothing else) and its extraction obligation section. No gate is added. ## Agreement with the merged skill text (acceptance 1) Each clause of the skill's paragraph at `origin/main` `d537a318b3` (`.claude/skills/checklist-test/SKILL.md` L223–225, §5), set against RUNNER.md's new sentence: | Skill clause | RUNNER.md | |---|---| | 由同一 PR 对该项的清单编辑(§3)引发,⛔ 不立 `qa-run` 记录 | "A verification re-run files none — a run whose trigger is the same PR's ledger edit of that item" | | 逐项判定表进 PR 正文 | "Its per-item verdict table goes in the PR body" | | 该项 `history` 行的 `ref` 指向该 PR | "the item's `history` row carries the PR as its `ref`" | | `partial`/`blocked` 的缺口进 PR 正文与 `fixtures.knownGaps` | "a `partial` or `blocked` gap goes in the PR body and the item's `fixtures.knownGaps`" | | 产品缺陷 `fail` 照常抽卡、溯源指向该 PR | "a product-defect `fail` is still extracted as its own card, pointing at the PR" | | 条款过期在同一 diff 修 | "a stale clause is fixed in the same diff" | | §4: 整轮运行(发版候选、区或 `all`、维护者点名目标)恰好立一张 | "Every completed sweep run (a release candidate, an area or `all` run, or a maintainer-named target) … files one GitHub issue" | ## Premise re-check (on `origin/main` `d537a318b3`, with controls) - `RUNNER.md` 「pass or fail alike」 → 1 hit (L460). Control 「The record title」 → 1 hit. - `runs/README.md` 「every completed run files one」 → 1 hit (L11). Control `qa-run` → 2 hits. - `README.md` 「every run files」 → 1 hit (L466). Control `history` → 7 hits. - The last commit to touch the three files is `c40506aac` (#24156). Nothing is newer: history was deepened 60 commits past the shallow boundary to read this. - Line-number references into these files elsewhere in the tree: none found (`git grep` for `RUNNER.md:` / `#L` forms). Pins quoting the three old sentences outside these files: none found (`git grep` exit 1; control `qa-run` hits in `scripts/qa/qa-rollup.mjs`). ## Gates (local, all run at head `27ab96524`, exit captured before any pipe) The list is derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` from the actual diff: 13 families, plus the watchdog that the card's acceptance names. - `node scripts/check-ci-filter-parity.mjs`: exit 0 - `node scripts/check-closing-keyword-parity.mjs`: exit 0. `--self-test`: exit 0 - `node scripts/check-comment-mask-corpus.mjs`: exit 0 (9472 files, 0 disagree) - `pnpm --filter @objectstack/lint run check:doc-formula-expressions`: exit 0 - The first attempt exited 3 (prerequisite not met: lint/formula not built). That is not a measurement. Built under the shared lock (`turbo run build --filter=@objectstack/formula --filter=@objectstack/lint`, 4/4 cached), then re-ran. - `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. A separate control-byte scan of the three files found none. - `pnpm check:platform-checklist`: exit 0 (16 areas, 327 items; traps 19 documented, 19 in use) - `pnpm check:refd-timer-probe`: exit 0 - `pnpm check:watch-hint-literal`: exit 0 - `node scripts/check-platform-checklist-watchdog.mjs`: exit 0 - `dispatch-gates --ran` reconciliation: "13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN". All 13 carry an exit code, so the zero is derived from them. The watchdog is recorded as outside the derivation. No tests or ablation: this is a docs-only diff with no tested behaviour. Families that CI alone runs are read from this PR's check-runs. ## Changeset `skip-changeset`, measured. `docs/qa/**` sits at the repo root. The root `package.json` is `private: true`, and no package manifest references `platform-checklist`. Control: `git grep '"files"'` over `packages/*/package.json` hits 74 manifests. Nothing in this diff ships in any published tarball. ## Acceptance notes - Ruling item 1's letter reads "files no `qa-run` record when every clause passes" and then covers `partial` / `blocked` and the two kinds of `fail` one by one. The merged skill states the no-record rule for every verification re-run, with the product-defect `fail` going to a card that points at the PR. These docs follow the merged skill text, as acceptance 1 requires. - README.md and runs/README.md defer to RUNNER.md for the full exception instead of restating all of it. RUNNER.md points at the skill's 「验证重测」 paragraph. --- _Generated by [Claude Code](https://claude.ai/code/session_01VwoC2RxFfgzY2eXuC7Xo6g)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 9c74d40 commit 21070a2

3 files changed

Lines changed: 20 additions & 7 deletions

File tree

‎docs/qa/platform-checklist/README.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,13 +463,15 @@ ever matters more than PR independence, re-adding the one-line CI step
463463
A release no longer gets a hand-written checklist. The sweep for `vN` is a **filter
464464
over this ledger**: `since == vN` (the new capabilities) ∪ all `P0` (the standing
465465
smoke) ∪ any item whose `source` cites a PR in the release. The tracking issue for the
466-
sweep links here and hosts discussion; results stay OUT of the repo — every run files
466+
sweep links here and hosts discussion; results stay OUT of the repo — every sweep run files
467467
one `qa-run` GitHub issue as its record (text only: the verdict table + a reproduction
468468
rule per failure — RUNNER.md rule 2's authentication/authorization carve-out excepted,
469469
and it binds the extracted card too — never screenshots; `runs/` is git-ignored), and a
470470
run that finds a real regression extracts it into its own standalone card at close-out
471471
(RUNNER.md, extraction obligation — the run issue itself stays `qa-run`-only, excluded
472-
from triage). Item text, fixtures learned, and new traps discovered flow **back into the
472+
from triage). A verification re-run — one triggered by the same PR's ledger edit of that
473+
item — files no record: its evidence is the PR body and the item's `history` row (RUNNER.md,
474+
Run records). Item text, fixtures learned, and new traps discovered flow **back into the
473475
ledger** as revisions — that is the accumulation the one-off checklists never had.
474476

475477
## Relationship to what already exists

‎docs/qa/platform-checklist/RUNNER.md‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,16 @@ contradicts it, and correct it here when it does.
457457

458458
## Run records — the GitHub issue is the report
459459

460-
Every completed run — **pass or fail alike** — files **one GitHub issue** as its durable
461-
record, labeled `qa-run` and nothing else (extraction obligation below). **Nothing lands
462-
in the repo** — not the JSON, not screenshots; `runs/` is git-ignored except its README.
460+
Every completed sweep run (a release candidate, an area or `all` run, or a maintainer-named
461+
target) — **pass or fail alike** — files **one GitHub issue** as its durable record, labeled
462+
`qa-run` and nothing else (extraction obligation below). **A verification re-run files
463+
none** — a run whose trigger is the same PR's ledger edit of that item. Its per-item verdict
464+
table goes in the PR body and the item's `history` row carries the PR as its `ref`; a
465+
`partial` or `blocked` gap goes in the PR body and the item's `fixtures.knownGaps`; a
466+
product-defect `fail` is still extracted as its own card, pointing at the PR; a stale clause
467+
is fixed in the same diff (`.claude/skills/checklist-test/SKILL.md` §5, 「验证重测」).
468+
**Nothing lands in the repo** — not the JSON, not screenshots; `runs/` is git-ignored except
469+
its README.
463470

464471
**The issue is text only.** Screenshots and DOM dumps are oracles you consult *live* to
465472
reach a verdict — never report artifacts. What the report carries for a defect is the

‎docs/qa/platform-checklist/runs/README.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@ land in the repo (`.gitignore` here tracks only this README). The durable source
88
the checklist itself under `../areas/`; a run is a snapshot that goes stale the moment
99
the build moves.
1010

11-
**Where results go instead — every completed run files one `qa-run` GitHub issue** as its
12-
durable, **text-only** report (pass or fail alike):
11+
**Where results go instead — every completed sweep run** (a release candidate, an area or
12+
`all` run, a maintainer-named target) **files one `qa-run` GitHub issue** as its durable,
13+
**text-only** report (pass or fail alike). A verification re-run — one triggered by the same
14+
PR's ledger edit of that item — files none: its evidence is the PR body and the item's
15+
`history` row, with a `partial` / `blocked` gap also in `fixtures.knownGaps`
16+
([../RUNNER.md](../RUNNER.md), Run records, states the exception in full). A sweep's record:
1317

1418
- the issue **body** hosts the per-clause verdict table (pass / partial / fail / blocked)
1519
and the scope — the selector that chose the items + the `revision` each ran against;

0 commit comments

Comments
 (0)