Skip to content

docs(qa): 18.0 sweep anchor round 6 — mark the objectui live specs stale at the console pin, and narrow or drop the pins that cover no full clause, in the UI-facing areas - #24697

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24579-v18-sweep-round6-pin-coverage
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-24579-v18-sweep-round6-pin-coverage

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Refs #24579
Clause-②: no

Round 6 of the 18.0 sweep's wave anchor. This PR covers the anchor's §2 themes "objectui live e2e is not green at its own pin" and "pins that cover no full clause", for the items round 4's report (6278788942) names in the four UI-facing area files. Only ledger text changes: 18 items in studio-authoring.json (2) and records-forms.json (16) take one revision bump each and one history row. There is no product code, test, pin or objectui spec change in either repository. dashboards.json and search.json hold no item in either theme, so they are unchanged.

Each history row cites its run records: Tier 1 run #24598, and the area records #24572 / #24616 (records-forms) or #24571 / #24604 (studio-authoring). The rows were committed with the placeholder #PENDING-24579R6, because a history 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.

The console pin moved after the sweep

The sweep ran its live specs at objectui 4016370af3c9, the .objectui-sha of the sweep subjects 5b14b7f3 and ba4afcc2. Before this branch was cut, #24660 moved the pin to 12dc7b47c340, so that is the shipped pin at main 92ce3af404 and at 045dae8f23, which this branch merges. I re-read every spec at the new pin:

  • git diff 4016370af3c9 12dc7b47c340 -- e2e/live/ changes only e2e/live/ci/backend.env (OBJECTSTACK_VERSION next.3 → next.5). No spec byte changed. Nothing in e2e/live/ changed between 12dc7b47c340 and objectui main 90518cdb84 either.
  • So a red spec could have turned green at the new pin only through a change on the surface it drives. For each red spec I checked the cause the round-1 records name against objectui source at 12dc7b47c340 (and at 90518cdb84), and against the showcase metadata at objectstack 92ce3af404. The metadata is unchanged since ba4afcc2. Every cause still holds, and no spec is green at 12dc7b47c340 that was red at 4016370af3c9. So each red spec gets a stale record. Its why cites the run at 4016370af3c9 and the re-reading at 12dc7b47c340.
  • Specs that were green at 4016370af3c9 stay cited. Their bytes are identical at 12dc7b47c340, but their verdict there is NOT MEASURED, because no live run exists at the new pin.
spec (objectui e2e/live/) at 4016370af3c9 (#24598) at 12dc7b47c340 (re-read) cause (round-1 record)
studio-object-designer.spec.ts 2 pass / 2 fail (F1, F4) F1, F4 still stale F4 expects no banner for a picklist that has no option source, which the spec choice-source rule refuses (packages/spec/src/data/field.zod.ts is unchanged between the objectstack builds the two pins consume, 2c9bf9430a11 and f4755a68a797). F1 opens /apps/com.objectstack.studio, which no stock boot loads (#24571)
studio-record-page.spec.ts 0 / 1 still stale fills the Object control as an input. On the page create path, the only change between the pins is ResourceEditPage's declaration-only gate for sharing rules (already marked stale from #7695)
user-filters.spec.ts 2 / 4 4 cases still stale it expects pre-ADR-0053 showcase metadata: in-view tabs, four visualizations, userFilters on tabular. It also expects a cell role where the grid exposes gridcell (#24572)
inline-edit-polish-2572.spec.ts 0 / 1 still stale it expects an approval lock, but manager_review is deliberately lockRecord: false. The spec also consumes its own fixture (#24572)
field-conditional-rules.spec.ts 0 / 1 still stale it expects a disabled input. The UI renders read-only text instead. objectui packages/fields is unchanged, and the form renderer's only change is objectui#13055's hide-on-fault group gate (#24572)
grid-file-upload.spec.ts, form-view-subforms.spec.ts 0 / 1 each still stale the 'Line Items' locator collides in strict mode with the dialog's screen-reader-only description, "Enter the record and its line items, then save." That text is unchanged at both shas (#24572)
cascading-options.spec.ts 1 / 1 (re-filter case red) re-filter case still stale it waits for md-form-submit, which only MasterDetailForm renders, on showcase_cascade. That object has no child object, so its form is a flat ModalForm (#24572)
detail-related-list.spec.ts 0 / 1 still stale it waits for ?recordId=, but a row click opens /record/ID. The navigation code and packages/spec/src/data/record-surface.ts are unchanged (#24572)
record-history-display.spec.ts 0 / 0 / 1 skipped still skips it runs only against app-todo, on the premise that the showcase has no enable.trackHistory object. That premise is stale: showcase_account has one
saved-view-filter, required-when-submit, grid-conditional-rules, grid-parent-rules, master-detail, summary-rollup, list-row-action-cel, action-modal pass NOT MEASURED (bytes identical) —

screen-flow.spec.ts (red at 4016370af3c9) belongs to automation.json, which is not in this claim.

Theme A — objectui live e2e is not green at its own pin

I used the shape studio-authoring.record-page-roundtrip already carries: automated.stale with since / observedIn / ref / why / runnerRule / ownedBy. Where green refs sit beside the stale one, the record also takes stale.partial, which is platform-core.metadata-authoring-roundtrip's precedent. Each runnerRule says which green specs a runner may still cite, and which clauses must be driven by hand.

item field(s) edited revision run record spec verdict at pin
studio-authoring.object-designer-roundtrip automated.stale 5 → 6 #24598; #24571 / #24604 studio-object-designer.spec.ts F1, F4 red at 4016370af3c9, stale at 12dc7b47c340; F2 / F3 green
studio-authoring.record-page-roundtrip automated.stale.observedIn, automated.stale.why 5 → 6 #24598; #24571 / #24604 studio-record-page.spec.ts red / stale at both (observedIn #7695 → #24598)
records-forms.list-view-capabilities automated.stale 4 → 5 #24598; #24572 / #24616 user-filters.spec.ts (4 of 6), inline-edit-polish-2572.spec.ts red / stale at both; saved-view-filter green
records-forms.conditional-rules-grid automated.stale 5 → 6 #24598; #24572 / #24616 grid-file-upload.spec.ts red / stale at both; the other two green
records-forms.cascading-options automated.stale 3 → 4 #24598; #24572 / #24616 cascading-options.spec.ts re-filter case red / stale at both; server case green
records-forms.cascading-multilevel-and-clear automated.stale 3 → 4 #24598; #24572 / #24616 cascading-options.spec.ts re-filter case red / stale at both; objectql pin green
records-forms.master-detail-atomic-save automated.stale 3 → 4 #24598; #24572 / #24616 form-view-subforms.spec.ts red / stale at both; the other two green
records-forms.field-history-tracking automated.stale 2 → 3 #24598; #24572 / #24616 record-history-display.spec.ts skipped at both; the plugin-audit pins green

Theme B — pins that cover no full clause

I applied one rule to each item round 4 named. The test is what the pin's own test bodies assert, read at 4016370af3c9. Every one of these pins is byte-identical at 12dc7b47c340.

  • Narrow where a pin asserts at least one full clause. In that case automated.ref says which clauses each pin covers, in the round-2 scope-depth-asymmetry shape. A pin that scores none of the item's clauses is dropped from the ref, and the ref names it.
  • Drop automated where no pin asserts a full clause, even when green. The item's fixtures.knownGaps line that said "AUTOMATION IS PINNED IN THE objectui REPO" now says that no pin covers a full clause, what each adjacent pin does assert, and when automated may come back.
item field(s) edited revision run record pin verdict at pin choice
records-forms.adhoc-filter-sort-builder automated.ref, automated.stale 4 → 5 #24598; #24572 / #24616 user-filters.spec.ts; saved-view-filter.spec.ts user-filters 2 / 4 (stale at both), saved-view-filter green narrow: user-filters → acceptance[4] only (the uf_FIELD half green, the uf__tab half stale). saved-view-filter pins a saved filter alone, not the merge in acceptance[0], so it is dropped
records-forms.conditional-rules-header automated.ref, automated.stale, acceptance[4].verify 2 → 3 #24598; #24572 / #24616 list-row-action-cel.spec.ts (+ theme A field-conditional-rules) green; field-conditional-rules stale at both narrow: required-when-submit → acceptance[0]. list-row-action-cel gates the task list's Mark Done, not the invoice's Edit / Delete, so it is dropped, and acceptance[4].verify no longer says it pins the clause
records-forms.related-list-server-pagination automated.ref, automated.stale 5 → 6 #24598; #24572 / #24616 detail-related-list.spec.ts stale at both narrow + stale: when green it pins acceptance[2] alone
records-forms.concurrent-edit-conflict automated.ref, acceptance[4].verify 3 → 4 #24598; #24572 / #24616 occSave.test.tsx; inline-edit-polish-2572.spec.ts occSave green; inline-edit-polish stale narrow: occSave → acceptance[3] and acceptance[1]'s modal half. inline-edit-polish saves one field with no If-Match and no conflict, so it scores no clause here even when green. It is dropped, not marked stale
records-forms.import-job-undo-cancel automated.ref, acceptance[0].verify 5 → 6 #24598 (not run); #24572 / #24616 import-console-undo.spec.ts, import-undo.spec.ts not run (self-gated, own configs) narrow: acceptance[1], acceptance[3] and acceptance[0]'s undoable-job half. Neither spec reads the per-row results, and nothing covers acceptance[2] (cancel)
records-forms.action-param-widgets automated.ref 2 → 3 #24598; #24572 / #24616 action-modal.spec.ts (objectui half) green narrow: the objectui half only opens a task's Edit modal and dismisses it, so it is dropped. The dogfood pin → acceptance[2]
records-forms.action-location-matrix automated removed, fixtures.knownGaps[0] 12 → 13 #24598; #24572 / #24616 list-row-action-cel.spec.ts, action-modal.spec.ts green, adjacent drop → Tier 2 (P1)
records-forms.calendar-interactions automated removed, fixtures.knownGaps[0] 3 → 4 #24598; #24572 / #24616 CalendarView.dnd.test.tsx green, geometry only drop → Tier 2 (P1)
records-forms.grid-personalization automated removed, fixtures.knownGaps[0] 5 → 6 #24598; #24572 / #24616 groupedPagination, groupedBooleanLabel, inlineEditPersistence tests green, adjacent drop → Tier 3 (P2)
records-forms.lookup-picker-create-new automated removed, fixtures.knownGaps[0] 3 → 4 #24598; #24572 / #24616 LookupField.dependsOn, RecordPickerDialog.filterOptions tests green, adjacent drop → Tier 3 (P2)

Why this rule, on the four axes:

One consequence differs from the dispatch's hypothesis. A dropped P2 item becomes Tier 3 (deferred unless a change touches it, checklist-test skill §1), not Tier 2. That applies to grid-personalization and lookup-picker-create-new.

Items left alone

Acceptance notes

  • RUNNER.md says "23 items carry an automated.ref that lives ENTIRELY in the objectui repo". I measured 28 on main before this PR, and 24 after it. RUNNER.md is outside this claim, so the count is recorded here and not edited.
  • grid-parent-rules.spec.ts stays cited as green. The surface it drives, MasterDetailForm's header-record read, was rewritten between the pins (objectui#13062's repair, bc98626e), so its verdict at 12dc7b47c340 is NOT MEASURED.
  • No objectui card tracks any of the stale specs. I scanned all 5257 objectui issues (numbers 7–13097, every state) for each spec name and for the causes above, and found none that covers them. The anchor carries the finding for the PM to file.

Verification

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 the declared fields plus revision and the one new history row; and the text outside the 18 edited items' spans is byte-identical.

Gates come from node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, which derived 13 families for the 2 changed paths, against merge base 045dae8f2. All 13 ran at head 70963fb0c2, each exit captured before any pipe, all exit 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)". 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.

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 are 886/896 at 045dae8f23 and 886/896 at head, against 413 cited sources, with 18 file floors held both times. At the original base 92ce3af404 they were 875/885 before and after this diff. So 0 anchors were lost and 0 added.

There is no ablation, because no tested behaviour changed. skip-changeset: docs/qa/** ships in none of the 86 package manifests' files[], and the repo root is private.


Generated by Claude Code

… the UI-facing checklist areas

Eighteen items in studio-authoring and records-forms take one revision each.
Specs that are red or skipped at the console pin, and still stale at the
shipped pin, carry an automated.stale record. Pins that cover no full
clause are narrowed per clause or dropped, so the next sweep drives those
clauses by hand. History refs carry a placeholder until the PR exists.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 20, 2026
Replaces the placeholder ref in the 18 history rows added by this branch
with the pull request's number. No other byte changes.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat review

ACCEPT · domain:devx seat 1 · os-warren · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T00:38Z · head 4a516d601d · card #24579 round 6 (claim 6279626364)

  • Form.
    • Draft, base main, first lines Refs #24579 / Clause-②: no.
    • Assignee os-warren; labels size/m, skip-changeset.
    • node scripts/pm/check-governed-merges.mjs --pr 24697 → NOT governed, 293 changed lines.
    • git merge-tree against main d1173825b7 is clean.
  • Scope. records-forms.json (+211 / −51) and studio-authoring.json (+26 / −5) only. No product code, test, pin or objectui spec. dashboards.json and search.json hold no item in either theme and are unchanged.
  • Ledger invariants, by parse against 045dae8f23.
  • Theme A (stale objectui live specs). 11 items carry automated.stale.
  • Theme B (pins covering no full clause).
    • 6 refs are narrowed per clause.
    • 4 items lose automated: action-location-matrix and calendar-interactions go to Tier 2; grid-personalization and lookup-picker-create-new go to Tier 3 as P2. Each knownGaps[0] now says what the adjacent pins do assert and when automated may return.
    • The per-item choices are argued on the four axes. Extending a pin is objectui's test change, outside this card.
  • Gates.
    • The dev's dispatch-gates union: 13 derived, 13 run, all exit 0 at 4a516d601d.
    • check:platform-checklist holds 886/896 anchors, none lost.
    • Check-runs at 4a516d601d: 39, all completed, 31 success and 8 skipped. node scripts/pm/check-expected-skips.mjs --pr 24697 → OK — 8 skipped check-run(s), every one in the roster (exit 0).
    • No review, no comment.
  • Filed from this round: one objectui family card for the stale live specs (the dev scanned all 5257 objectui issues and found none). Its number is in this seat's landing record on qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) #24579.
  • Carried on the card.
    • studio-authoring.draft-publish-lifecycle's clause-free pins.
    • Two green specs that over-claim a clause: summary-rollup on master-detail-atomic-save, and grid-conditional-rules on conditional-rules-grid.
    • platform-core.metadata-authoring-roundtrip's stale observedIn #7695.
    • RUNNER.md's "23 items" count (28 before this PR, 24 after).
    • grid-parent-rules.spec.ts is NOT MEASURED at the new pin.

This seat readies the PR and queues it with auto-merge.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 00:39
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 00:39
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 73d4cc7 Oct 20, 2026
40 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24579-v18-sweep-round6-pin-coverage branch October 20, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m 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.

2 participants