Skip to content

feat(qa): AI 可执行的平台功能标准测试清单 — 15 域 178 项 + 能力覆盖 ratchet + CI 门禁 - #6557

Merged
qq9340100 merged 15 commits into
mainfrom
claude/platform-test-checklist-ocwugl
Aug 8, 2026
Merged

feat(qa): AI 可执行的平台功能标准测试清单 — 15 域 178 项 + 能力覆盖 ratchet + CI 门禁#6557
qq9340100 merged 15 commits into
mainfrom
claude/platform-test-checklist-ocwugl

Conversation

@baozhoutao

@baozhoutao baozhoutao commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

What this is

A standing, machine-readable platform test checklist executed by AI agents, replacing the per-release one-offs (the #3358 checkbox issue, docs/plans/release-15.1-test-plan.md hand tables) with a durable ledger that accumulates across releases.

docs/qa/platform-checklist/ — 15 areas · 178 items · 995 acceptance clauses, each clause carrying {clause, oracle, verify, evidence}. Enumerable surfaces are variants matrices derived from the spec's own Zod enums (49 field types, 20 chart types, 7 action locations, flow node/trigger types, query operators, 9 auth methods, 6 validation-rule types, …).

How it stays honest (AI-accuracy design)

  • Oracle hierarchy (RUNNER.md): server truth (api/network/build/test) outranks screenshot outranks DOM; DOM only after a screenshot confirms render (anti-hydration-false-positive, dogfood skill §3).
  • fail is expensive: reproduce ×2 + automation self-check + traps ruled out + issue filed. partial/blocked are first-class verdicts — half-proven never ticks green.
  • Both sides of every gate: entitled succeeds AND unentitled is server-side denied.
  • 8 blocked items name their missing fixture instead of faking coverage; existing automation is pinned via automated.ref.

How it stays complete (sustainability)

  • Coverage ratchet (coverage.json + scripts/check-platform-checklist.mjs, wired into lint.yml, 0.35s): the capability universe is derived from packages/spec/liveness/*.json at check time — a new metadata kind with no checklist item/waiver fails CI, both directions (UNCLASSIFIED/ORPHAN, mirrors the liveness ledger discipline). Now 27 kinds mapped / 2 waived (book/doc, display-only).
  • Variants-freshness gate: matrix items pin enumSource; when the spec grows an enum member the checklist's own CI goes red.
  • Manual sweep trigger: the internal coverage-sweep skill (.claude/skills/coverage-sweep/ + SWEEP.md) re-runs the five-angle gap audit on demand ("跑一轮 coverage sweep").

Four stale waivers were caught and corrected during authoring (api, datasource, mapping, hook — each had a real stock fixture the waiver claimed didn't exist).

Needs maintainer decisions (not blocking this PR)

FOLLOW-UPS.md carries 8 product findings surfaced while grounding items — notably D1: saved-report schedule routes ignored _context (cross-owner schedule delete/list), now fixed in #6683 (owner-gated, deny-as-404); the dashboards.saved-report-ownership probe flips from expected-fail to a positive assertion once both land (tracked in #6681). Also client-only stubs in AppManagementPage, undo without ifMatch, and docs advertising retired capabilities (enable.trash/enable.mru).

Validation

pnpm check:platform-checklist → OK (15 areas, 178 items; coverage 27 mapped / 2 waived). Negative-tested: injected structural defects and coverage holes each produce named failures (11 structural, 3 coverage classes). Docs/scripts only — no published-package changes, no changeset needed.


🤖 Generated with Claude Code

https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43


Generated by Claude Code

claude added 9 commits August 7, 2026 12:05
Release verification lived in one-off shapes — a checkbox issue per release
(#3358) and a hand table (docs/plans/release-15.1-test-plan.md) — that could
not accumulate: items were not reusable across releases, ticks had no revision
to pin against, and every fixture gap a sweep found (#3408/#3409/#3415) was
rediscovered from prose. This lands the standing, machine-readable successor:

- areas/*.json — 9 areas, 32 items seeded from the #3358 evidence runs. Each
  item: clause-grained acceptance (clause + oracle + verify + evidence),
  declared fixtures with knownGaps, negative sides (both sides of every gate),
  false-positive traps, immutable <area>.<slug> ids, revision + history for
  append/change governance, `automated` refs for the 🤖 lane.
- README.md — item anatomy; append/change/retire lifecycle (append-only, never
  delete); release sweep = filter over the ledger (since:vN ∪ P0); relationship
  to dogfood-verification, @objectstack/verify, showcase coverage.ts, e2e-live,
  and why spec's inert TestScenarioSchema is deliberately not reused.
- RUNNER.md — AI execution protocol: verdict vocabulary with first-class
  `partial`/`blocked`, oracle hierarchy (server truth > screenshot > DOM),
  fail requires reproduction ×2 + automation self-check + filed issue, trap
  vocabulary distilled from the #3358 retractions, durable run records under
  runs/ pinned to item revisions.
- scripts/check-platform-checklist.mjs (+ lint.yml gate, house style):
  structural invariants only — unique immutable ids, revision == last history
  entry, every acceptance clause names its oracle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
Closes the two coverage holes the seed import left: nothing covered the AI
metadata kinds (agent/tool/skill, MCP surfaces) or the integration/system
services (declarative connectors, webhooks, jobs, email templates).

- areas/ai.json — agent/tool/skill metadata round-trip (variants matrix),
  MCP HTTP transport both-sides (enabled 501/off + /mcp/skill public),
  stdio fail-closed + RLS/FLS parity (from #3358 §9), run_action
  ai.exposed gate + audit (15.1 §A9), validate_expression. Showcase ships
  no AI seeds (ADR-0063) — fixture requirements declared explicitly.
- areas/integration-system.json — declarative connector lifecycle from the
  15.1 §B rows (#2994/#3062 boot materialization, #3049 degraded husk +
  atomic recovery, #3059 stdio default-deny allowlist, #3024 spec-path
  escape rejection, #2985 descriptor-only boot audit, objectui#2563
  designer picker), webhook live-fire + retired-trigger build gate, job
  scheduled run, email-template variable rendering.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
First two areas rewritten to the deep-test contract: concrete
draft-door/API steps, clause-grained acceptance citing the exact spec
sources (dashboard.zod.ts LEGACY key list as a variants matrix,
chart.zod.ts wrong-layer guidance, translation.zod.ts metadataForms
group), rejected-draft-not-persisted checks, per-recipient locale
controls, and round-trip/symmetry clauses. Existing items bumped to
revision 2 with history entries; new items added per area.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
…(检查点)

Progressive deepening checkpoint — validator green at 11 areas / 74 items.
identity-auth complete (auth-method matrix from AuthPluginConfigSchema +
PUBLIC_AUTH_FEATURES, delegated-admin invitation gates ADR-0105 D8,
admin lifecycle ops with audit attribution); automation and
access-security rewritten to the deep contract (ExecutionStepLogSchema
region tags, runRlsProofs delegation with skip-audit clause, readonlyWhen
locks, owner-anchor forge/transfer/disown probes); records-forms
in progress by its agent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
platform-core: /ready probe, authored-nav-vs-served diff, new
seed-integrity item (authored row baselines, verbatim value spot-diff,
upsert idempotence — the #3408/#3415 silent-seed class as first-class
FAILs), metadata registry serving + draft→publish round-trip with deny
gates. approvals: per-group signoff now pins the exact seed wiring
(seed-approval-demo.ts distinct holders, run resume down the approve
edge, actor derived from session #3800), quorum keeps its fixture
blocker plus a runnable clamp-contrast clause.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
Five-angle capability-coverage sweep (console UI surfaces · spec enums ·
routes/settings · built-in apps page-by-page · docs claims) closed a class
of systematic omissions and grew the checklist 84 → 170 items across 15
areas, authored by 8 area-partitioned writer agents grounded in real source.

Headline gaps closed:
- The three built-in console apps (Setup/Studio/Account) had ZERO nav
  coverage — nav-surfaces-render only swept the showcase app. Added
  builtin-apps-nav-render (P0) + settings-hub-roundtrip, session-list-revoke,
  api-key-ui-lifecycle, org/team management, oauth/consent, audit-log-browser,
  notification-center, package-lifecycle, app-management, and more.
- Three coverage.json waivers were FACTUALLY STALE and are corrected to real
  items: api (showcase authors 2 live declarative endpoints), datasource
  (read-only SQLite federation fixture), mapping (showcase_inquiry_feed).
  Ratchet now 25 kinds mapped / 3 waived (book/doc display-only, hook indirect).
- sharing-rules-widen (the marquee gap): criteria rules → materialized
  sys_record_share, explain attribution, §A13 seed-not-clobber.
- Enumerable-surface matrices previously missing: validation rule types (6),
  action locations (7, ACTION_LOCATIONS), gantt/kanban/calendar drag
  persistence, bulk select-all-matching, adhoc filter/sort builder, grid
  personalization, lookup create-new, concurrent-edit OCC-409, discussion
  @mentions, and route-ledger-live-parity extended to all ledgers (#3361 class).

Every item stays honest: 8 blocked items name the missing fixture rather than
faking coverage; product defects found while grounding (saved-report schedule
cross-owner delete, AppManagement client-only stubs, undo without ifMatch) are
encoded as expected-fail probes and catalogued in FOLLOW-UPS.md for maintainer
decision, alongside docs-drift findings (retired capabilities still advertised).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
Automation to keep the checklist current with minimal human effort, plus a
deep-drill round on the surfaces a maintainer asked about (objects, field
types, hooks, custom pages, cascading fields).

Automation:
- scripts/check-platform-checklist.mjs gains a VARIANTS-FRESHNESS ratchet:
  a matrix item pins the spec enum it was authored against via `enumSource`
  {file, export, expect}; the validator extracts the enum's current member
  count from spec source and fails CI when it drifts, with a precise fix
  instruction. Closes the gap the kind-level coverage ratchet left — the
  latter catches a NEW metadata kind, enumSource catches a NEW value inside
  an existing kind's enum. Pinned: field types (49), chart types (20),
  action locations (7), webhook triggers (5), flow node types (20).
- SWEEP.md — the five-angle gap-hunt as a committed runbook, so "跑一轮
  coverage sweep" is an AI-executable refresh (the human-effort half); the
  deterministic gates are the zero-human half.

Deep-drill items (the 4th stale waiver corrected → coverage 26 mapped / 2
waived, only book/doc display-only remain):
- records-forms.object-hook-lifecycle (un-waives `hook` — showcase ships 4
  observable hooks): 6 lifecycle events, CEL previous-vs-record transition
  semantics (#4770/#4784), async+retry, onError abort-rollback vs log, priority.
- studio-authoring custom-page items: declarative block composition + data
  binding, page variables + action interpolation, html-parsed vs react-executed
  source tiers with the OS_PAGE_REACT capability gate.
- records-forms field drills: per-type write-path constraint enforcement (22
  variants, exact ADR-0114 codes), multilevel cascade clear-semantics, encrypted
  field fail-closed. Two server-side integrity gaps found → FOLLOW-UPS D7/D8.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
Manual trigger for the five-angle checklist gap hunt: the maintainer says
"跑一轮 coverage sweep" (or asks "X 有测试吗" needing verification) and the
AI session loads the orchestration contract — worktree-first, five read-only
hunters in parallel, per-area writer partitioning, central coverage.json
reconciliation with waiver re-audit, validator-green landing, FOLLOW-UPS for
defects. Canonical method stays in docs/qa/platform-checklist/SWEEP.md; the
skill is the trigger + contract, not a second copy. metadata.internal: true
per template-consistency (sibling to dogfood-verification/pm-dispatch).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
@vercel

vercel Bot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 8, 2026 1:08pm

Request Review

@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation ci/cd dependencies Pull requests that update a dependency file labels Aug 8, 2026
@baozhoutao baozhoutao added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed documentation Improvements or additions to documentation ci/cd size/xl dependencies Pull requests that update a dependency file labels Aug 8, 2026 — with Claude
Demonstrates the runs/ format end-to-end: an opus runner drove the item in
headless Chromium against an isolated showcase boot. Verdict pass across all
6 clauses + the wrong-password negative, each clause pinned to a server-truth
oracle (sign-in/get-session status, on-the-wire 401 deny side) and a captured
screenshot. runs/evidence/2026-08-08-console-login/ carries the 8 screenshots
+ 2 network traces.

The record also shows the protocol earning its keep: the runner's automation
self-check (RUNNER rule 2) caught a false "dead shell" P0 — a cookie-only clear
left the console authed via its localStorage bearer token; only a full
credential clear produced the real redirect-to-login. And it surfaced a genuine
run-time precondition (the vendored /_console dist builds separately from the
showcase workspace closure), now recorded in the env block rather than faked
around.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation ci/cd dependencies Pull requests that update a dependency file labels Aug 8, 2026
claude added 4 commits August 8, 2026 06:49
…checklist-ocwugl

# Conflicts:
#	package.json
Per maintainer decision: a run record is OUTPUT about one build, not source.
Removed the committed console-login run record + evidence PNGs, git-ignore
runs/* (keeping only README + .gitignore), and rewrote the RUNNER/README
guidance so results live in the executing environment (CI artifact / tracking
issue / external QA store), never in git. The checklist under areas/ stays the
durable version-controlled contract; a run is a transient assertion about a
build and belongs with that build's other artifacts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
The execution counterpart to coverage-sweep (which authors items). Lets the
maintainer test a specified feature point or feature FILE on demand:

- scripts/checklist-select.mjs — deterministic selector resolver. Turns an item
  id / area: / capability: / priority: / surface: / since:vN / **file:<path>**
  into the concrete runnable item set. `file:` maps a framework source file to
  the items whose `source[]` cites it ("test whatever covers this file"), with
  narrowest-useful precedence (exact/basename before dir-level). Blocked items
  excluded by default. Carries a --self-test (12 cases) now wired into the
  check:platform-checklist gate, so the resolver stays healthy under the same CI.
- .claude/skills/checklist-run/SKILL.md — the runner skill (internal, marked
  internal:true per template-consistency.test.ts). Trigger + selection +
  isolation/parallelism contract; defers the judging protocol to RUNNER.md and
  the boot know-how to dogfood-verification. Plans the run by surface (build the
  vendored console only for browser/mixed items), isolates per item (own port +
  file DB), dispatches opus runner subagents few-at-a-time for browser items,
  and keeps results OUT of the repo per the runs/ policy.

README documents the two-skill split (coverage-sweep authors, checklist-run
executes) and the selector grammar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
By maintainer decision the platform test checklist is a QA ledger, not a
per-PR code gate. Removed the `check:platform-checklist` step from lint.yml so
no unrelated PR is ever blocked by checklist drift; the script stays for manual
/ periodic use (`pnpm check:platform-checklist`), run before a release or after
a large platform surface lands. README + the lint.yml note updated to say so.

Trade-off understood and accepted: a NEW metadata kind landing on main (like
`capability` did) will no longer fail a PR — it surfaces at the next manual run
instead. The coverage ratchet still exists; it just isn't a blocking gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
@qq9340100 qq9340100 changed the title feat(qa): AI 可执行的平台功能标准测试清单 — 15 域 177 项 + 能力覆盖 ratchet + CI 门禁 feat(qa): AI 可执行的平台功能标准测试清单 — 15 域 178 项 + 能力覆盖 ratchet + CI 门禁 Aug 8, 2026
@qq9340100
qq9340100 added this pull request to the merge queue Aug 8, 2026
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31258408522 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Dogfood Regression Gate (2/3) — 失败步骤: Boot example apps and exercise real user flows

    ✗✗ rls_note  [rls-hole] member B cannot read it (GET 404) yet MUTATED it by id (PATCH 200) — by-id write bypassed RLS (#1994 class)
    �[41m�[1m FAIL �[22m�[49m �[30m�[46m isolated �[49m�[39m test/showcase-scope-depth.dogfood.test.ts�[2m > �[22mshowcase: scope-depth read — `unit` (ADR-0057 D1)
    

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 5 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 8, 2026
Added an 'Operating cadence — when to run this (it is NOT in CI)' section to
the checklist README: run `pnpm check:platform-checklist` before a release,
after a large platform surface lands, when touching the checklist, or beside a
coverage-sweep/checklist-run — with the trade-off (a new kind/enum that lands
between runs is caught at the next manual run, not on merge) spelled out and
the one-line re-add if latency ever matters more than PR independence.

Corrected every now-stale "fails CI" reference across README, coverage.json
$comment, and 4 area-file history entries to say the manual check flags/​catches
the drift instead of blocking a PR. Validator green (178 items, 27/2).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YD9f6FYyMraUWYeJf53V43
@claude

claude Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Queue steward — NEW signature: intercepted, NOT requeued.

This PR was dropped from the merge queue by the merge_group build 31258408522 (generation pr-6557-2c2a212a…, 12:57:04Z). The failure signature matches no row of the four ledger tables in #5810, so under the steward's four-branch rule it is not requeued as-is — it goes to the owning lane for diagnosis.

Full signature (read from the complete log archive, not the tail — SKILL note 7)

  • Failing job: Dogfood Regression Gate (2/3), failing step Boot example apps and exercise real user flows.

  • Failed suite (1 of 29): packages/qa/dogfood/test/showcase-scope-depth.dogfood.test.ts — describe block showcase: scope-depth read — `unit` (ADR-0057 D1).

  • Error string, verbatim:

    Error: Hook timed out in 10000ms.
    If this is a long-running hook, pass a timeout value as the last argument or configure it globally with "hookTimeout".
     ❯ test/showcase-scope-depth.dogfood.test.ts:162:3
    
  • Line 162 is the afterAll teardown hook, and the source frame the reporter printed makes the asymmetry visible on its own:

    161|   beforeAll(async () => { world = await bootScopeWorld('unit'); }, 120…
    162|   afterAll(async () => { await world?.stack?.stop(); });
    
  • Suite totals: Test Files 1 failed | 28 passed (29), Tests 155 passed | 1 skipped (156), Duration 128.47s. Turbo: Failed: @objectstack/dogfood#test, 61 successful, 62 total.

  • The second red job (Dogfood Regression Gate, step Verify dogfood shard results) is the consequence, not an independent fault — taken from the aggregator's own declared inputs rather than log adjacency (SKILL note 7).

  • ⚠️ check-test-completeness: OK (1 package(s), 156 test(s) declared and all 156 accounted for) — per SKILL note 7 a green completeness check is not a green suite; the workflow's own comment reads "A red suite plus a GREEN completeness check means real test failures".

Preliminary reading (a steward's first pass, not a verdict)

The beforeAll that boots the scope world is given an explicit 120_000ms; the paired afterAll that stops it is given nothing, so it inherits vitest's default 10000ms hookTimeout. Tearing down a booted stack (HTTP server plus drivers) at the tail of a ~128s full-suite run is not obviously a sub-10s operation under merge-queue load, where the queue runs the full suite on a cold cache rather than the affected subset the PR-side CI runs. The shape is a default-timeout coverage hole on the teardown side, not an assertion failure: nothing about the assertion under test disagreed.

Two supporting readings, both against origin/main:

  • This asymmetry is pre-existing on main (git show origin/main:packages/qa/dogfood/test/showcase-scope-depth.dogfood.test.ts, lines 161–162 identical to the frame above) — it did not arrive with this PR.
  • This PR's diff does not reach the failing file. All 28 changed paths are docs/qa/platform-checklist/**, scripts/check-platform-checklist.mjs, scripts/checklist-select.mjs, .claude/skills/**, .github/workflows/lint.yml and package.json; packages/qa/dogfood/** is untouched.

Suggested action (the lane's call, not the steward's)

  1. Decide whether the teardown hook should carry an explicit timeout matching its boot budget, or whether world?.stack?.stop() is genuinely hanging — the two have different fixes and only the second is a real bug.
  2. If it is judged a first-instance flake rather than a defect, it still needs a human ledger ruling on 队列管家 Routine(三仓总管):合并队列健康专责化 —— flaky 签名分诊 / 原样重投 / 新签名拦截 / 跨仓 pin 链停滞观测(座位 Routine 化第二例,维护者 2026-08-06 拍板) #5810 before any future occurrence can be requeued as-is — the steward cannot add ledger rows.

This PR carries no Fixes line, so there is no anchor issue for the steward to file the companion note on; whoever owns this lane please pick it up from here. ⛔ Not requeued, no code touched, no ready/draft switch, no merge, no claim changed.

A ledger-upgrade request covering the class this belongs to has been filed on #5810 for the maintainer.


Generated by Claude Code

@qq9340100
qq9340100 added this pull request to the merge queue Aug 8, 2026
Merged via the queue into main with commit be8561d Aug 8, 2026
25 checks passed
@qq9340100
qq9340100 deleted the claude/platform-test-checklist-ocwugl branch August 8, 2026 14:20

Copy link
Copy Markdown
Contributor

Queue steward — follow-up to the interception above: signature did NOT reproduce, PR landed.

Recording the outcome so the interception comment (13:27:06Z) does not read as still-pending on a merged PR.

when what
12:57:04Z merge_group build 31258408522 red — Hook timed out in 10000ms at showcase-scope-depth.dogfood.test.ts:162 (afterAll)
13:27:06Z steward intercepted (four ledger tables: zero hits) — ⛔ not requeued
13:42:17Z lane re-enqueued (qq9340100) — lane's own call, steward did not act
14:04:07Z retry generation pr-6557-64d764e7…: CI / Lint & Type Check / Spec Liveness Check / Console Pin Freshness all completed: success
14:20:14Z MERGED

What this settles and what it does not.

  • It settles that the failure is intermittent, not a deterministic defect this PR introduced. That was already the steward's initial read for two independent reasons — the timeout asymmetry (beforeAll explicitly 120_000ms, its paired afterAll inheriting the 10000ms default hookTimeout) is pre-existing on origin/main, and this PR's 28 changed paths do not touch packages/qa/dogfood/**. The clean retry is now direct evidence for it.
  • It does not settle the ledger question. The teardown-side coverage hole is still there on main, unowned, and will recur on some other PR. The interception itself was correct under the four-branch rule and would be made again: zero ledger hits ⇒ no requeue, regardless of how a retry happens to turn out.

The standing ledger request on #5810 (instance ③ of the timeout-coverage-hole class) is updated with this evidence. No action is required on this PR.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/xl skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants