Skip to content

Commit ec2694d

Browse files
docs(qa): 18.0 sweep anchor round 8 — drop or narrow the three pins round 6 named that cover no full clause (#24723)
Refs #24579 Clause-②: no Round 8 of the 18.0 sweep's wave anchor. It takes the three leftovers that round 6's report (`6280484387`, `out_of_scope_findings[1]`) named under the anchor's §2 theme "pins that cover no full clause". Only ledger text changes: three items, one in `studio-authoring.json` and two in `records-forms.json`, each take one `revision` bump and one `history` row. There is no product code, test, pin or objectui spec change in either repository. The rule is round 6's theme-B rule (`theme_b_choices` in that report): - Read each pin's own test bodies. - **Narrow** where a pin asserts at least one full clause: `automated.ref` says which clauses each pin covers, and a pin that scores none is dropped from the ref and named there. - **Drop `automated`** where no pin asserts a full clause even when green. `fixtures.knownGaps` then says what the pin does assert and when `automated` may return. ## The three items | item | field(s) edited | revision | spec or pin | what it asserts | run record | |---|---|---|---|---|---| | `studio-authoring.draft-publish-lifecycle` | `automated` removed; `fixtures.knownGaps[0]` added | 7 → 8 | `packages/qa/dogfood/test/dashboard-designer-roundtrip.dogfood.test.ts` | A layout-less dashboard: the draft PUT answers 200, the publish answers 200, and the read-back is `{ type, name, item }` with 3 widgets and no layout. That is acceptance[1]'s post-publish half. No state:'draft' receipt, no pre-publish read, and nothing of acceptance[2]–[11]. **No full clause → `automated` dropped; the P1 item is now Tier 2** | #24598 (every clause not-run); #24571 (round 1 scored acceptance[0]–[5] and [7]–[11] pass on this pin alone); #24604 (acceptance[6] and negative[0]–[4] by hand) | | `records-forms.master-detail-atomic-save` | `automated.ref`, `acceptance[2].verify` | 4 → 5 | objectui `e2e/live/summary-rollup.spec.ts` | It rolls `showcase_task.estimate_hours` up into `showcase_project` (`total_estimate` SUM, `task_count` COUNT) through a direct `POST /api/v1/batch`, and reads both back after that create and after a child delete. It never opens the invoice form and never reads `invoice.total`. **No clause of this item → dropped from the ref and named there; `acceptance[2].verify` no longer says it pins the clause** | #24598 (acceptance[2] not-run: carrier mismatch); #24572 (round 1 scored acceptance[2] pass on it); #24616 (the roll-up by hand) | | `records-forms.conditional-rules-grid` | `automated.ref` | 6 → 7 | objectui `e2e/live/grid-conditional-rules.spec.ts` | On the first line of the New Invoice dialog, Description carries no required flag at Qty 2, is flagged at Qty 100, and clears once filled. It adds no second row and never saves. **Narrowed: the spec claims acceptance[0]'s inline-flag half only.** The ref also says that no pin covers acceptance[1] or acceptance[4] | #24598 (acceptance[0] not-run: the blocked-save half is not asserted); #24572 (round 1 scored acceptance[0] pass on it); #24616 (acceptance[1], [3] and [4] by hand) | What stays as it was: - `master-detail-atomic-save` still cites `master-detail.spec.ts` and `form-view-subforms.spec.ts`, as before. - `conditional-rules-grid` still cites `grid-parent-rules.spec.ts` and `grid-file-upload.spec.ts`, as before. - Both items keep the `automated.stale` record that round 6 wrote (the `form-view-subforms.spec.ts` record and the `grid-file-upload.spec.ts` record). - `conditional-rules-grid`'s `acceptance[0].verify` already scopes that spec to the inline flag ("pinned for the inline flag …; the objectui pin asserts only the inline required flag"), so it needed no change. - Every clause's text is unchanged. ## The objectui pins The sweep ran its live specs at objectui `4016370af3c9`. The shipped console pin is `12dc7b47c340` (`.objectui-sha` at `main` `54159fd742`). - Blob hashes are identical at both shas for all six specs the two records-forms items cite: `summary-rollup` `49338c81`, `grid-conditional-rules` `43662daf`, `master-detail` `fdfaf571`, `grid-parent-rules` `b94e2d63`, `form-view-subforms` `4f2a95b5` and `grid-file-upload` `feb5ff39`. - `git diff --stat 4016370af3c9 12dc7b47c340 -- e2e/live/` changes only `e2e/live/ci/backend.env`. So one reading of each spec serves both pins. - The green verdicts come from #24598 at `4016370af3c9`. At `12dc7b47c340` they are **NOT MEASURED**, because no live run exists at the new pin. - The dogfood pin is unchanged between the sweep subject `ba4afcc2` and this branch's base. ## Acceptance notes These are further findings. Each is named here and not acted on: the dispatch scopes this round to the three items' named claims. Several sit on the same two items, and those are left for the next pass or for a ruling. - **`conditional-rules-grid`, `grid-parent-rules.spec.ts`:** on the New Invoice dialog, it asserts that Qty and Unit Price lock on paid and unlock on draft. It never asserts the Product cell, although `product` carries the same `readonlyWhen` (`examples/app-showcase/src/data/objects/invoice.object.ts`) and acceptance[2] says "the three cells". `acceptance[2].verify` says the spec pins the clause, and #24598 scored it pass. - **`conditional-rules-grid`, `grid-file-upload.spec.ts` (stale):** even with its locator repaired, it would assert only the upload cell and a `receipt` object, with a name and an http URL, in the submitted batch. It never re-reads the line or fetches the file, which is what acceptance[3] scores. Its receipt-object expectation also differs from the ADR-0104 stored form, an opaque file id: #24616 saw the batch send a bare id at `4016370a`. That is a second stale cause, which the stale record's `why` does not name. Under the theme-B rule this spec scores no clause even when green, so it would be dropped. The dispatch keeps its stale record, so it stays. - **`master-detail-atomic-save`, `master-detail.spec.ts`:** it drives `showcase_project_workspace` ("New Project + Tasks", one task child added through the row form), not the invoice grid with two lines. `acceptance[0].verify` cites its two test names, and #24598 scored acceptance[0] pass on it. It is the same carrier class as `summary-rollup`. The clause text is carrier-neutral, but the verify's "both line ops" is not. - **`records-forms.field-type-constraints` `acceptance[7].verify`** cites `summary-rollup.spec.ts` for `showcase_invoice.total`. That is the same carrier mismatch, on an item outside this claim. - **`draft-publish-lifecycle`'s `source[]`** names `packages/objectql/src/protocol-publish-package-drafts.test.ts` and `packages/rest/src/meta-write-actor-identity.test.ts`. These were never `automated` refs, and they were not measured as pins here. They may bear on acceptance[4] and acceptance[11] at the protocol and route layer. Measuring them is the way `automated` could return. - **#24616's per-clause lines for `master-detail-atomic-save`** label the roll-up and failing-child clauses one index high. Its "acceptance[3]" is the text of acceptance[2], and its "acceptance[4]" is the text of acceptance[3]. acceptance[4] (the derived subform) was not hand-driven there. That run record is final, so this is only noted. ## Verification Every area-file edit went through round 6's span-recording textual editor, which never re-serialises a file. It splices only the declared value spans, then re-parses the whole file and asserts four things: 1. The new document equals the old one with the declared ops applied. 2. Every other item, and every top-level key besides `items`, is value-equal. 3. Each edited item's changed leaf paths are a subset of the declared fields plus `revision` and the one new history row. 4. The text outside the three edited items' spans is byte-identical. The editor's reported changed paths were exactly: `revision`, `fixtures.knownGaps`, `automated`, `history[7]` · `revision`, `automated.ref`, `history[6]` · `revision`, `acceptance[2].verify`, `automated.ref`, `history[4]`. Gates come from `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`. It derived 13 families for the 2 changed paths, and the list is the same at `14284d5372` and at the merge head `23ccd80f74` (merge base `54159fd742`). All 13 ran at `23ccd80f74`. Each exit code was captured before any pipe, and all were 0: - `node scripts/check-ci-filter-parity.mjs` - `node scripts/check-closing-keyword-parity.mjs` - `node scripts/check-closing-keyword-parity.mjs --self-test` - `node scripts/check-comment-mask-corpus.mjs` - `pnpm --filter @objectstack/lint run check:doc-formula-expressions` - `pnpm check:cross-package-test-inputs` - `pnpm check:doc-authoring` - `pnpm check:driver-memory-census` - `pnpm check:gitlink-declared` - `pnpm check:nul-bytes` - `pnpm check:platform-checklist` - `pnpm check:refd-timer-probe` - `pnpm check:watch-hint-literal` `--ran` reconciles: "13 derived famil(ies) accounted for — 13 run, 0 NOT-MEASURED (a DERIVED zero — all 13 recorded an exit code and none of them is 3)". At `14284d5372`, `check:doc-formula-expressions` first refused with exit 3, a prerequisite: `@objectstack/formula` and `@objectstack/lint` were not built. I built both under the shared verify lock (VERDICT command-exit 0), and the rerun exited 0. After the merge I rebuilt them again (`packages/lint/src` moved on `main`), and the run above is from after that rebuild. `check:platform-checklist` runs in no per-PR CI, so this local reading is its evidence: > check-platform-checklist: OK — 16 areas, 327 items (322 active, 1 planned) Symbol anchors read 886/896 against 413 cited sources, with 18 file floors held, at base `73d4cc7391`, at `14284d5372` and at `23ccd80f74`. So 0 were lost and 0 added. On the `automated` drop: the gate checks `automated.ref` only when `automated` is present (`scripts/check-platform-checklist.mjs`, the `"automated.ref" must point at the pinning test` check). So a leftover `automated: {}` would be refused. The earlier drops removed the key, and so does this one. The history rows were committed with the placeholder `#PENDING-24579R8`, because a history `ref` names this PR and the PR had no number yet. A follow-up commit swaps in this PR's number and changes nothing else. The gate re-run at that head is reported on the card. There is no ablation, because no tested behaviour changed. On `skip-changeset`: `docs/qa/**` appears in none of the 86 package manifests' `files[]`, and the repo root is private. --- _Generated by [Claude Code](https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent acff643 commit ec2694d

2 files changed

Lines changed: 23 additions & 8 deletions

File tree

‎docs/qa/platform-checklist/areas/records-forms.json‎

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@
930930
"title": "Grid-level conditional rules: row-scoped requiredWhen and parent-scoped readonlyWhen in the inline line-item grid",
931931
"since": "v16",
932932
"status": "active",
933-
"revision": 6,
933+
"revision": 7,
934934
"priority": "P1",
935935
"surface": "browser",
936936
"personas": [
@@ -997,7 +997,7 @@
997997
],
998998
"automated": {
999999
"kind": "e2e",
1000-
"ref": "objectui: e2e/live/grid-conditional-rules.spec.ts, e2e/live/grid-parent-rules.spec.ts, e2e/live/grid-file-upload.spec.ts",
1000+
"ref": "objectui: e2e/live/grid-conditional-rules.spec.ts (acceptance[0]'s inline-flag half ONLY — on the New Invoice dialog's first line, Description carries no required flag at Qty 2, is flagged at Qty 100 and clears once filled; the spec adds no second row and never saves, so neither the unflagged sibling row nor the blocked save is pinned), e2e/live/grid-parent-rules.spec.ts, e2e/live/grid-file-upload.spec.ts (stale at the pin, see automated.stale). No pin covers acceptance[1] or acceptance[4]",
10011001
"stale": {
10021002
"since": "2026-10-19",
10031003
"observedIn": "#24598",
@@ -1049,6 +1049,12 @@
10491049
"date": "2026-10-20",
10501050
"change": "automated.stale added — §2 theme \"objectui live e2e is not green at its own pin\" of wave anchor #24579 (18.0 sweep). Tier 1 run #24598 at the sweep's console pin 4016370af3c9: grid-file-upload.spec.ts failed as a stale spec (a strict-mode locator collision; cause from QA run #24572, #24616 drove the item by hand); grid-conditional-rules.spec.ts and grid-parent-rules.spec.ts passed and stay cited. Re-read at the shipped pin 12dc7b47c340: the spec and the colliding description are unchanged. No clause changed",
10511051
"ref": "#24697"
1052+
},
1053+
{
1054+
"revision": 7,
1055+
"date": "2026-10-20",
1056+
"change": "automated.ref narrowed per clause — §2 theme \"pins that cover no full clause\" of wave anchor #24579 (18.0 sweep), one of the leftovers round 6 (#24697) named. Tier 1 run #24598 at the sweep's console pin 4016370af3c9: grid-conditional-rules.spec.ts passed, but it flags the Description cell on one row and never saves, so #24598 scored acceptance[0] not-run (round 1's QA run #24572 had scored it pass on that spec). The ref now says the spec claims acceptance[0]'s inline-flag half only, and that no pin covers acceptance[1] or [4]; QA run #24616 drove acceptance[1], [3] and [4] by hand. The spec is byte-identical at the shipped pin 12dc7b47c340. grid-parent-rules.spec.ts and grid-file-upload.spec.ts stay cited as they were, and the automated.stale record (grid-file-upload.spec.ts) is unchanged. No clause changed",
1057+
"ref": "#24723"
10521058
}
10531059
]
10541060
},
@@ -1175,7 +1181,7 @@
11751181
"title": "Master + line items save as one atomic batch, with server-side roll-up",
11761182
"since": "v16",
11771183
"status": "active",
1178-
"revision": 4,
1184+
"revision": 5,
11791185
"priority": "P1",
11801186
"surface": "browser",
11811187
"personas": [
@@ -1216,7 +1222,7 @@
12161222
{
12171223
"clause": "invoice.total is a SERVER-side roll-up: computed on the atomic create, recomputed when a line is added and again when it is deleted",
12181224
"oracle": "api",
1219-
"verify": "total == sum(line.amount) after each mutation (pinned by objectui e2e/live/summary-rollup.spec.ts: computed on atomic create; recomputes on child add/delete)",
1225+
"verify": "total == sum(line.amount) after each mutation. No pin covers this clause: objectui e2e/live/summary-rollup.spec.ts, cited here until revision 5, asserts a server roll-up on another carrier (showcase_project's SUM / COUNT over showcase_task, written through a direct /api/v1/batch), never invoice.total",
12201226
"evidence": "the three total reads"
12211227
},
12221228
{
@@ -1248,7 +1254,7 @@
12481254
],
12491255
"automated": {
12501256
"kind": "e2e",
1251-
"ref": "objectui: e2e/live/master-detail.spec.ts, e2e/live/summary-rollup.spec.ts, e2e/live/form-view-subforms.spec.ts",
1257+
"ref": "objectui: e2e/live/master-detail.spec.ts, e2e/live/form-view-subforms.spec.ts. Dropped at revision 5: e2e/live/summary-rollup.spec.ts, which rolls showcase_task's estimate_hours up into showcase_project (total_estimate as a SUM, task_count as a COUNT) through a direct POST /api/v1/batch, reading both back after that create and again after a child delete. It never opens the invoice form and never reads invoice.total, the roll-up acceptance[2] scores, so it asserts no clause of this item (Tier 1 run #24598 scored acceptance[2] not-run on it for that carrier mismatch)",
12521258
"stale": {
12531259
"since": "2026-10-19",
12541260
"observedIn": "#24598",
@@ -1288,6 +1294,12 @@
12881294
"date": "2026-10-20",
12891295
"change": "automated.stale added — §2 theme \"objectui live e2e is not green at its own pin\" of wave anchor #24579 (18.0 sweep). Tier 1 run #24598 at the sweep's console pin 4016370af3c9: form-view-subforms.spec.ts failed as a stale spec (a strict-mode locator collision; cause from QA run #24572, #24616 drove the item by hand); master-detail.spec.ts and summary-rollup.spec.ts passed and stay cited. Re-read at the shipped pin 12dc7b47c340: the spec and the colliding description are unchanged. No clause changed",
12901296
"ref": "#24697"
1297+
},
1298+
{
1299+
"revision": 5,
1300+
"date": "2026-10-20",
1301+
"change": "automated.ref and acceptance[2].verify corrected — §2 theme \"pins that cover no full clause\" of wave anchor #24579 (18.0 sweep), one of the leftovers round 6 (#24697) named. Tier 1 run #24598 at the sweep's console pin 4016370af3c9: summary-rollup.spec.ts passed 2/2, but it rolls showcase_task up into showcase_project through a direct batch and never reads invoice.total, so #24598 scored acceptance[2] not-run on it (round 1's QA run #24572 had scored acceptance[2] pass on it). It asserts no clause of this item, so it is dropped from the ref and named there, and acceptance[2].verify no longer says it pins the clause. The spec is byte-identical at the shipped pin 12dc7b47c340. QA run #24616 drove the invoice.total roll-up by hand. master-detail.spec.ts and form-view-subforms.spec.ts stay cited, and the automated.stale record (form-view-subforms.spec.ts) is unchanged. No clause text changed",
1302+
"ref": "#24723"
12911303
}
12921304
]
12931305
},

‎docs/qa/platform-checklist/areas/studio-authoring.json‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@
377377
"title": "Metadata draft→publish lifecycle: drafts staged not served, publish flips visibility atomically, conflicts and invalid drafts refused, and the history/audit/diff/rollback forensics tell the truth",
378378
"since": "v16",
379379
"status": "active",
380-
"revision": 7,
380+
"revision": 8,
381381
"priority": "P1",
382382
"surface": "mixed",
383383
"personas": ["admin (authors drafts)", "end user (must not see drafts)"],
@@ -386,6 +386,9 @@
386386
"requires": [
387387
"scratch metadata names only (e.g. qa_lifecycle_probe) via the draft door PUT /api/v1/meta/<type>/<name>?mode=draft — no shipped showcase file is touched",
388388
"a writable package with two stageable drafts for the package-wide publish-drafts door"
389+
],
390+
"knownGaps": [
391+
"NO PIN COVERS A FULL CLAUSE — `automated` was dropped at revision 8, so this P1 item is hand-driven (Tier 2). packages/qa/dogfood/test/dashboard-designer-roundtrip.dogfood.test.ts, the pin it cited, saves a layout-less dashboard as a draft (PUT ?mode=draft answers 200), publishes it (200) and reads it back as { type, name, item } with its three widgets. That is acceptance[1]'s post-publish half and nothing more: it asserts no state:'draft' receipt and makes no pre-publish read (acceptance[0], and acceptance[1]'s never-served half), and it probes none of acceptance[2]–[11]: no second draft, stale If-Match, publish-drafts batch, invalid draft, Studio chrome, history, diff, rollback, audit or X-Actor. So it scores no clause (Tier 1 run #24598: every clause not-run). Re-add `automated` only with a pin that asserts a full clause."
389392
]
390393
},
391394
"steps": [
@@ -486,7 +489,6 @@
486489
"OPEN LEDGER QUESTION, not a verdict (run #7695 → #7753 item 2): publish-drafts' namespace-gate abort answers HTTP 200 with data.success:false rather than a 4xx. The envelope-level success flag may well be the intended contract for this door, and the atomicity behind it is correct (the abort leaves both names 404) — but an HTTP-status-only client reads an aborted publish as a successful one, which is why it is worth ONE deliberate ruling. Recorded here so the observation is not re-derived every run; a runner does not adjudicate it and does not score it as a FAIL"
487490
],
488491
"traps": ["hydration-race", "dispatcher-vs-hono-route"],
489-
"automated": { "kind": "e2e", "ref": "packages/qa/dogfood/test/dashboard-designer-roundtrip.dogfood.test.ts" },
490492
"source": [
491493
"packages/spec/src/api/protocol.zod.ts#SaveMetaItemResponse (SaveMetaItemResponse: state draft|active, version as If-Match/409 OCC token, 'staged only — not served until published')",
492494
"packages/runtime/src/domains/packages.ts#packages (POST /packages/:id/publish-drafts, ADR-0033/ADR-0045 visibility flip + its failure warning)",
@@ -503,7 +505,8 @@
503505
{ "revision": 4, "date": "2026-08-17", "change": "re-spell after [#7941]: the rollback step and the audit clause named X-Actor as an alternate actor source alongside the session identity; #7941 removed the header limb from resolveMetaWriteActor entirely (landed as commit 4dc8a618e, PR #9119) so it is now the SOLE source and X-Actor is ignored outright, not consulted even as a fallback. Re-spelled the rollback step, the audit acceptance clause, and the rest-server.ts source pointer to name the single source; added a new step + acceptance clause pairing the inverted check the finding asked for — send X-Actor and confirm it does NOT change the recorded actor — since that is now a meaningful QA-layer assertion nothing else covers (the unit pins live in packages/rest/src/meta-write-actor-identity.test.ts, added as a source pointer). The capability itself (audit rows name the acting user, never anonymous) is unchanged and was never wrong.", "ref": "#9118" },
504506
{ "revision": 5, "date": "2026-10-13", "change": "steps[9] and acceptance[8] (clause and verify) diff the two publish versions read off /history, and steps[8] and acceptance[7].verify say how history counts (assertion defect, #23166 A8; parked on #23121, carried by #23169). sys_metadata_history records draft saves and publishes alike, so ?from=1&to=2 compared the first draft save with its own publish (changed []); on QA run #23166's clean two-round run the published revisions were v2 and v4, and their diff named the edited widget key. The rollback steps are unchanged", "ref": "#23169" },
505507
{ "revision": 6, "date": "2026-10-16", "change": "steps[2] and acceptance[6] (clause, verify) re-pointed (checklist-accuracy finding 4 of QA run #23942, wave #23878). The Studio counter is no longer 'Changes · n' text but a numbered pill on the Changes button (objectui#12459), and the pill counts the drafts of the package in scope — an env-wide (package-less) dashboard draft is counted in none, so #23942 staged the browser leg's draft in a writable package. The step and clause name the pill and the writable-package staging, and the step says how to reach the draft in Studio — through an app of that package whose navigation names the dashboard, since a package with no app offers no dashboard to select (the re-run on #24036 found no chip until it staged one). Not loosened: a chip or pill that survives the publish, or is missing while the draft is pending, still FAILS", "ref": "#24036" },
506-
{ "revision": 7, "date": "2026-10-19", "change": "steps[2], acceptance[6].clause and acceptance[6].verify corrected from QA run #24604 (18.0 sweep round 2, ba4afcc2), re-read at the console pin 4016370af3c9: the Studio item header reads 'Draft · N unpublished' (engine.studio.itemDraftPending, objectui#12725) — 'Unpublished draft' is the chip of other surfaces (ObjectListViewInspector, the OWD overview), not this item header — and a REST publish shows in Studio only after a reload. The round's other draft notes are not taken: no step of this item discards a draft (so the ?state=draft discard spelling has no clause to correct), and the NS_ prefix a scratch dashboard was given is not required (the namespace-prefix rule judges objects only — packages/spec/src/kernel/namespace-prefix.ts). Wave anchor #24579 round 2 §3 (6272314386)", "ref": "#24671" }
508+
{ "revision": 7, "date": "2026-10-19", "change": "steps[2], acceptance[6].clause and acceptance[6].verify corrected from QA run #24604 (18.0 sweep round 2, ba4afcc2), re-read at the console pin 4016370af3c9: the Studio item header reads 'Draft · N unpublished' (engine.studio.itemDraftPending, objectui#12725) — 'Unpublished draft' is the chip of other surfaces (ObjectListViewInspector, the OWD overview), not this item header — and a REST publish shows in Studio only after a reload. The round's other draft notes are not taken: no step of this item discards a draft (so the ?state=draft discard spelling has no clause to correct), and the NS_ prefix a scratch dashboard was given is not required (the namespace-prefix rule judges objects only — packages/spec/src/kernel/namespace-prefix.ts). Wave anchor #24579 round 2 §3 (6272314386)", "ref": "#24671" },
509+
{ "revision": 8, "date": "2026-10-20", "change": "automated dropped and fixtures.knownGaps[0] added — §2 theme \"pins that cover no full clause\" of wave anchor #24579 (18.0 sweep), one of the leftovers round 6 (#24697) named. Tier 1 run #24598 scored every clause not-run on dashboard-designer-roundtrip.dogfood.test.ts, green 3/3 at ba4afcc2: it saves, publishes and reads back a layout-less dashboard, which is acceptance[1]'s post-publish half and no full clause. Round 1's QA run #24571 had scored acceptance[0]–[5] and [7]–[11] pass on that pin alone; QA run #24604 drove acceptance[6] and negative[0]–[4] by hand. The item had no knownGaps, so the line is new: it says what the pin asserts and when `automated` may return. The item is now Tier 2 (P1, no pin). No clause changed", "ref": "#24723" }
507510
]
508511
},
509512
{

0 commit comments

Comments
 (0)