Repository navigation
Commit 81120ca
Refs #24579
Clause-②: no
Round 14 of the 18.0 sweep's wave anchor. Round 6 (PR #24697) marked
eleven checklist items `automated.stale` because their objectui live
specs were red or skipped at the console pin. objectui#13132 repaired
those specs, and it landed as objectui `0b36ffa` (pointer `6284006658`
on the anchor). PR #24829 then moved `.objectui-sha` to `616df6598b42`,
which contains `0b36ffa`. This PR removes the eleven markers.
Only ledger text changes, in `platform-core.json` (1 item),
`records-forms.json` (8) and `studio-authoring.json` (2). Each edited
item gets one `revision` bump and one `history` row. Each row names the
pointer `6284006658`, objectui `0b36ffa` and the pin `616df6598b42`.
There is no product code, test, pin, objectui spec, changeset or
`RUNNER.md` change. After this PR, no item in any area file carries
`automated.stale` (11 before, 0 after).
The history rows were committed with the placeholder
`#PENDING-24579R14`, because a row's `ref` names this PR and the PR had
no number yet. A follow-up commit on this branch swaps in this PR's
number and changes nothing else.
## How each verdict was read
Every verdict comes from the spec's bytes, not from the pointer's
wording.
- **objectui history.** I used a full, non-shallow read-only clone of
objectui; the local checkout is shallow.
- `merge-base --is-ancestor 0b36ffa 616df65` → exit 0.
- Control: `12dc7b47c340` is an ancestor of `0b36ffa` → exit 0.
- Reverse: `616df6598b42` is an ancestor of `0b36ffa` → exit 1.
- **The pin at BASE.** `.objectui-sha` at BASE `41646a5788` is
`616df6598b429d2b3687301a2041198928e68971`.
- **What changed in `e2e/live/`.**
- Between the old pin `12dc7b47c340` and the new pin `616df6598b42`: 11
specs modified, all by objectui#13132, plus one new spec
(`declared-sharing-rules-reach-13091.spec.ts`) that no item here cites.
- Between `0b36ffa` and `616df6598b42` (10 commits): nothing in
`e2e/live/`. So each repaired spec has the same blob at `0b36ffa` and at
the new pin. Each also has the same blob at the old pin and at
`0b36ffa`'s parent, so the only change is #13132's.
- **Live evidence.** The only live reading is objectui's own: the whole
live suite measured 61 passed (11.0m) at `0b36ffa`, on the shipped
showcase. That is objectui's measurement at `0b36ffa`, not a run at
`616df6598b42`. No live run exists at the new pin, so the verdict there
is **NOT MEASURED**. Ten objectui commits between `0b36ffa` and the pin
touch product source, `app-shell`, `plugin-list` and `plugin-grid` among
it, so green at `0b36ffa` does not carry over to the pin.
- **Rule applied.** A spec that loses its stale marker keeps only the
clauses its ref (or the stale record's `runnerRule`) already claimed for
it. I re-read each one against what it asserts at the new pin. Where it
asserts less, the ref narrows and says so. Nothing widens.
## Per item
Blob ids are the spec at `12dc7b47c340` / `0b36ffa` / `616df6598b42`.
Every spec below changed between the old pin and the new one, and
objectui#13132 touched it, so every one is **repaired** and its marker
goes. Every `stale.partial` named only repaired specs, so each whole
`stale` block goes.
| item | rev | spec | blobs | ref change | other fields |
|:--|:--|:--|:--|:--|:--|
| `platform-core.metadata-authoring-roundtrip` | 4 → 5 |
`studio-record-page` | `181b2562c18d` / `3844a60ccd79` / `3844a60ccd79`
| scoped to acceptance[2] (the PUT the Studio create issues: type,
object, seeded `record:highlights`) | `acceptance[2].verify` |
| | | `studio-object-designer` (F1, F4) | `5967807df335` /
`58a7f1cbf024` / `58a7f1cbf024` | now says it scores no clause of this
item | |
| `studio-authoring.object-designer-roundtrip` | 6 → 7 |
`studio-object-designer` (F1, F4) | `5967807df335` / `58a7f1cbf024` /
`58a7f1cbf024` | scoped per case, as the old `runnerRule` had it: F3 →
acceptance[1]'s designer half, F2 → acceptance[2]. **Narrowed:** F4 →
acceptance[3]'s banner half only (one real option, not three; no
publish, no meta read). F1 asserts no clause | `steps[3]` (its note that
F4 collides with the no-option banner is no longer true) |
| `studio-authoring.record-page-roundtrip` | 6 → 7 |
`studio-record-page` | `181b2562c18d` / `3844a60ccd79` / `3844a60ccd79`
| scoped to acceptance[0], carrier-neutrally (the spec binds
`showcase_invoice`, the item `showcase_contact`) |
`acceptance[0].verify`, `acceptance[1].verify`, `steps[3]`, `source[0]`,
`source[1]` |
| | | `studio-editor` (named in the stale `why`, never in the ref) |
`e442b4c1a29e` / `19f9cc131654` / `19f9cc131654` | **not added**: the
ref never named it, so acceptance[1] stays driven by hand rather than
widening the ref | |
| `records-forms.list-view-capabilities` | 5 → 6 | `user-filters` (4 of
6 cases) | `aa52b2b8de2a` / `ab50146bcfd0` / `ab50146bcfd0` |
**narrowed:** acceptance[7]'s whitelist half only. The switcher case
reads the six entries, switches only to Kanban and reads no records. The
lookup quick-filter case is named as retired | |
| | | `inline-edit-polish-2572` | `84e0677df02e` / `4cc1557d475f` /
`4cc1557d475f` | **narrowed:** acceptance[5]'s PATCH half only, on a
Project record page's inline edit. It never re-reads the row.
`saved-view-filter` (`94a201c63a0a` at all three) keeps acceptance[1] |
`acceptance[5].verify` (it said "same contract … pins") |
| `records-forms.conditional-rules-header` | 3 → 4 |
`field-conditional-rules` | `c37a93cdc839` / `4e8c3d6ebec3` /
`4e8c3d6ebec3` | kept: acceptance[0]'s required marker, acceptance[2]'s
client lock and acceptance[3], all asserted at the new pin; only the
stale note goes | |
| `records-forms.cascading-options` | 4 → 5 | `cascading-options`
(re-filter case) | `648d5c917d19` / `5f65228948b7` / `5f65228948b7` |
**narrowed:** acceptance[0]'s re-filter and clear halves only. The case
never reads the province before a country is chosen. The server case
keeps acceptance[1] | `acceptance[0].verify` |
| `records-forms.master-detail-atomic-save` | 6 → 7 |
`form-view-subforms` | `4f2a95b529f3` / `9485f378abd7` / `9485f378abd7`
| scoped to acceptance[4], the clause the stale record sent to
hand-driving | |
| `records-forms.related-list-server-pagination` | 6 → 7 |
`detail-related-list` | `48a1d10e59da` / `f12f7237fd6f` / `f12f7237fd6f`
| kept: acceptance[2]; only the stale note goes | |
| `records-forms.adhoc-filter-sort-builder` | 5 → 6 | `user-filters` (4
of 6 cases) | `aa52b2b8de2a` / `ab50146bcfd0` / `ab50146bcfd0` | kept:
acceptance[4]. The `uf__tab` half now rests on the filter-tabs case on
the Task Triage page, the `uf_FIELD` half on the dropdown case | |
| `records-forms.cascading-multilevel-and-clear` | 4 → 5 |
`cascading-options` (re-filter case) | `648d5c917d19` / `5f65228948b7` /
`5f65228948b7` | **narrowed:** acceptance[0] without its submit half
(the case never submits). The objectql pin's scope (acceptance[1] and
[2]), which only the old `runnerRule` carried, moves into the ref
unchanged | |
| `records-forms.field-history-tracking` | 4 → 5 |
`record-history-display` | `2c4d8a674f81` / `7ebc45106cff` /
`7ebc45106cff` | now says it claims no clause of this item. It pins the
History tab's display contract, which `negative[3]` assigns to
`crud-roundtrip` | |
Every edited item loses `automated.stale` and gains one `history` row;
the table names every other field changed.
**The retired case.** `user-filters`' lookup quick-filter case was
deleted at `0b36ffa` because the shipped showcase declares no lookup
user filter. The one item whose record cited it,
`list-view-capabilities` (its stale `why`), no longer cites it, and its
ref names the case as retired. No clause in any item rested on it.
`adhoc-filter-sort-builder` counted it only inside "4 of 6 cases".
**`screen-flow` (named "unchanged" in the pointer).** Its blob is
`6713a1875a8e` at all three shas. No item in these three files cites it,
so there is no marker to judge.
## Items left alone
In the three claimed files:
- `studio-authoring.custom-page-render-and-blocks` mentions
"user-filters" as a product feature (`acceptance[4]`), not the spec or
its retired case.
- `records-forms.crud-roundtrip`, `form-view-gallery`,
`concurrent-edit-conflict` and `conditional-rules-grid`, and
`studio-authoring.first-run-loop`, cite a repaired spec but carry no
`automated.stale`, so they are outside the claim (see Acceptance notes
for two of them).
Outside the three files:
- `attachments-storage.inline-grid-receipt-cells` (`grid-file-upload`)
and `automation.screen-flow-roundtrip` (`screen-flow`) carry no
`automated.stale`.
- `cli.json`, `access-security.json`, `approvals.json` and `RUNNER.md`
are excluded by the claim.
## Mechanism hypotheses
1. **"Every item's stale specs are among the pointer's repaired specs,
so every `stale` block goes." Holds.** The stale records name 10
distinct specs, and all 10 are in the pointer's repaired list. All 11
blocks go.
2. **"The pointer's spec names map one-to-one onto the specs the stale
records cite, `studio-editor` a twelfth row that may appear in no item."
Partly falsified.**
- Of the pointer's 11 repaired specs, 10 appear in a stale record here.
- `grid-file-upload` appears in none: `conditional-rules-grid` dropped
its record at revision 8 (#24752).
- `studio-editor` does appear in an item, though in no `automated.ref`:
`record-page-roundtrip`'s stale `why`, `acceptance[1].verify` and
`source[1]`.
## Acceptance notes
- `records-forms.crud-roundtrip` `acceptance[4].verify` still says
`record-history-display.spec.ts` pins the contract "on showcase
Project". At `0b36ffa` the spec drives `showcase_account`, and it no
longer exercises booleans or datetimes, which
`auditHistoryDisplay.test.ts` pins (objectui#13132 R5). The item is
outside this claim, so this is noted here and not edited. Carrier:
#24579.
- `studio-authoring.first-run-loop` `acceptance[0].verify` still says F1
"targets testids package-id-input / package-name-input that no source
file declares". At `0b36ffa`, F1 creates the package through the Studio
surface's switcher (`package-form-id-input`, `studio-pkg-chip`), so that
note no longer describes the spec. The item is outside this claim.
Carrier: #24579.
- `studio-authoring.record-page-roundtrip` acceptance[1]:
`studio-editor.spec.ts` asserts the clause's picker (Card, Section,
Record details) carrier-neutrally, on a copy of
`showcase_project_workspace`. Adding it to the ref would widen the ref,
which this round's ruling forbids, so it is left for a later theme-B
pass. Carrier: #24579.
- `records-forms.master-detail-atomic-save`:
`form-view-subforms.spec.ts` also asserts the batch's parent op with a
`{$ref: 0}` child and the computed amount in the payload. The ref keeps
only acceptance[4], as the ruling requires. Carrier: #24579.
- Neither the README nor `check-platform-checklist.mjs` gives `stale`
any schema; the validator checks only `automated.ref`.
## Verification
**Editing.** Every area-file edit went through a scripted span editor
that never re-serialises a file. It splices only the declared value
spans, then re-parses and asserts four things:
- the document equals the old one with the declared ops applied;
- every other item and every top-level key is value-equal;
- each edited item's changed leaf paths are a subset of its declared
fields, plus `revision` and the one new history row;
- the text outside the edited items' spans is byte-identical.
All three files passed, against 18 + 33 + 39 unedited items.
**Merge.** `origin/main` `b3fc122f07` was merged at `647dfb355c`,
cleanly. PR #24850 had merged by then (10:48:41Z) and touched only
`cli.json`, `access-security.json` and `approvals.json`; `git merge-tree
--write-tree HEAD 19eb546` (its head) → exit 0. No open PR touches
the three files: I read all 12 open PRs' file lists, including all 1285
files of the Version Packages PR.
**Gates.** Derived by `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` at `647dfb355c`: 13 families for the
3 changed paths, against merge base `b3fc122f0`. All 13 ran at
`647dfb355c`, each exit captured before any pipe:
| command | exit |
|:--|:--|
| `node scripts/check-ci-filter-parity.mjs` | 0 |
| `node scripts/check-closing-keyword-parity.mjs` | 0 |
| `node scripts/check-closing-keyword-parity.mjs --self-test` | 0 |
| `node scripts/check-comment-mask-corpus.mjs` | 0 |
| `pnpm --filter @objectstack/lint run check:doc-formula-expressions` |
0 |
| `pnpm check:cross-package-test-inputs` | 0 |
| `pnpm check:doc-authoring` | 0 |
| `pnpm check:driver-memory-census` | 0 |
| `pnpm check:gitlink-declared` | 0 |
| `pnpm check:nul-bytes` | 0 |
| `pnpm check:platform-checklist` | 0 |
| `pnpm check:refd-timer-probe` | 0 |
| `pnpm check:watch-hint-literal` | 0 |
- `check:doc-formula-expressions` first refused with exit 3,
`PREREQUISITE NOT MET`, because `@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.
- `--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)".
- The rerun of the union on the placeholder-swap head is recorded in
this round's report on #24579.
**`check:platform-checklist`** runs in no per-PR CI, so this local
reading is its evidence. "OK — 16 areas, 328 items (323 active, 1
planned)" at every reading:
| tree | line citations | symbol anchors |
|:--|:--|:--|
| BASE `41646a5788` | 0 survive / 21 swept documents | 954/964, 428
cited sources, 18 file floors held |
| this diff on BASE (`6cf48cdc7b`) | 0 / 21 | 954/964, 428 |
| merged `main` `b3fc122f07` (these files at main) | 0 / 21 | 965/975,
430 |
| head `647dfb355c` | 0 / 21 | 965/975, 430 |
So this diff loses no anchor and adds none.
There is no ablation, because no tested behaviour changed.
**`skip-changeset`, re-measured.** None of the 73 non-private
`package.json` manifests (of 86 tracked) has a directory containing
`docs/qa`, and no `files[]` entry names it. The root package is private.
Positive control: the same probe maps `packages/spec/src/index.ts` to
`packages/spec/package.json`.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent e5b3de0 commit 81120ca
3 files changed
Lines changed: 93 additions & 130 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
419 | | - | |
| 419 | + | |
420 | 420 | | |
421 | 421 | | |
422 | 422 | | |
| |||
452 | 452 | | |
453 | 453 | | |
454 | 454 | | |
455 | | - | |
| 455 | + | |
456 | 456 | | |
457 | 457 | | |
458 | 458 | | |
| |||
482 | 482 | | |
483 | 483 | | |
484 | 484 | | |
485 | | - | |
486 | | - | |
487 | | - | |
488 | | - | |
489 | | - | |
490 | | - | |
491 | | - | |
492 | | - | |
493 | | - | |
494 | | - | |
| 485 | + | |
495 | 486 | | |
496 | 487 | | |
497 | 488 | | |
| |||
503 | 494 | | |
504 | 495 | | |
505 | 496 | | |
506 | | - | |
| 497 | + | |
| 498 | + | |
507 | 499 | | |
508 | 500 | | |
509 | 501 | | |
| |||
0 commit comments