Repository navigation
Commit ec2694d
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
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
930 | 930 | | |
931 | 931 | | |
932 | 932 | | |
933 | | - | |
| 933 | + | |
934 | 934 | | |
935 | 935 | | |
936 | 936 | | |
| |||
997 | 997 | | |
998 | 998 | | |
999 | 999 | | |
1000 | | - | |
| 1000 | + | |
1001 | 1001 | | |
1002 | 1002 | | |
1003 | 1003 | | |
| |||
1049 | 1049 | | |
1050 | 1050 | | |
1051 | 1051 | | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
1052 | 1058 | | |
1053 | 1059 | | |
1054 | 1060 | | |
| |||
1175 | 1181 | | |
1176 | 1182 | | |
1177 | 1183 | | |
1178 | | - | |
| 1184 | + | |
1179 | 1185 | | |
1180 | 1186 | | |
1181 | 1187 | | |
| |||
1216 | 1222 | | |
1217 | 1223 | | |
1218 | 1224 | | |
1219 | | - | |
| 1225 | + | |
1220 | 1226 | | |
1221 | 1227 | | |
1222 | 1228 | | |
| |||
1248 | 1254 | | |
1249 | 1255 | | |
1250 | 1256 | | |
1251 | | - | |
| 1257 | + | |
1252 | 1258 | | |
1253 | 1259 | | |
1254 | 1260 | | |
| |||
1288 | 1294 | | |
1289 | 1295 | | |
1290 | 1296 | | |
| 1297 | + | |
| 1298 | + | |
| 1299 | + | |
| 1300 | + | |
| 1301 | + | |
| 1302 | + | |
1291 | 1303 | | |
1292 | 1304 | | |
1293 | 1305 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
377 | 377 | | |
378 | 378 | | |
379 | 379 | | |
380 | | - | |
| 380 | + | |
381 | 381 | | |
382 | 382 | | |
383 | 383 | | |
| |||
386 | 386 | | |
387 | 387 | | |
388 | 388 | | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
389 | 392 | | |
390 | 393 | | |
391 | 394 | | |
| |||
486 | 489 | | |
487 | 490 | | |
488 | 491 | | |
489 | | - | |
490 | 492 | | |
491 | 493 | | |
492 | 494 | | |
| |||
503 | 505 | | |
504 | 506 | | |
505 | 507 | | |
506 | | - | |
| 508 | + | |
| 509 | + | |
507 | 510 | | |
508 | 511 | | |
509 | 512 | | |
| |||
0 commit comments