Skip to content

QA run · records-forms (30/44) · 5b14b7f3 · 2026-10-19 · 11 PASS / 19 PARTIAL / 0 FAIL / 0 BLOCKED / 14 NOT-RUN #24572

Closed as not planned

Description

@objectstack-fleet

Run record for the 18.0 release sweep, selector records-forms (resolved with node scripts/checklist-select.mjs area:records-forms --json), plan B (Tier 1 + Tier 2; Tier 3 deferred).

Environment fingerprint

  • framework: 5b14b7f3ad8e2e0786d228772f473d07b36b2477 (objectstack-ai/objectstack main), working tree clean
  • console: .objectui-sha = 4016370af3c9c9dafec2bc5299afd8e8079701b8, built with pnpm objectui:build; packages/console/dist/.objectui-sha stamp equals the pin (pnpm check:console-sha green), so the stale-console-bundle trap is ruled out for every console observation
  • app: showcase (examples/app-showcase), canonical boot OS_PORT=PORT pnpm -C examples/app-showcase exec objectstack dev --ui --seed-admin -p PORT -d file:/tmp/qa18/ITEM/data.db; every hand-driven item had its own port and file DB (listed per item below); seed: --seed-admin (admin@objectos.ai) + showcase seed + per-item scratch fixtures
  • Tier 1 pins: vitest per package against the same tree (pnpm exec vitest run FILES), 97 framework files / 2209 tests, 0 failed; objectui-side pins run inside a clone of objectui at 4016370af3c9 (unit vitest + playwright.live.config.ts against a showcase boot on :47431 through the objectui console dev server), RUNNER option (b)
  • browser: Playwright with /opt/pw-browsers/chromium, own context per persona, sign-in through the form
  • timestamps: 2026-10-19, environment prep 12:26–12:43 UTC, testing 12:43–13:53 UTC; Tier 2 items were driven in parallel by sub-runners (≤ 3–4 browser items at once), each on its own port/DB

Scope

Selector records-forms → 44 runnable item(s). Planned (not runnable, not counted): records-forms.picklist-shared-across-objects → planned. Blocked items hidden by the resolver were not run (no --include-blocked).

Tiering (checklist-test SKILL §1): Tier 1 = item carries automated.ref (pin run, cited); Tier 2 = unpinned P0/P1 (hand-driven); Tier 3 = unpinned P2 (deferred, not-run).

item priority surface tier revision item verdict
records-forms.crud-roundtrip P0 browser 1 10 pass
records-forms.field-type-matrix P1 mixed 1 3 partial
records-forms.list-view-capabilities P1 browser 1 3 partial
records-forms.view-type-gallery P1 browser 1 1 partial
records-forms.form-view-gallery P1 browser 2 3 pass
records-forms.conditional-rules-header P1 mixed 1 2 partial
records-forms.conditional-rules-grid P1 browser 1 4 partial
records-forms.cascading-options P1 mixed 1 3 partial
records-forms.master-detail-atomic-save P1 browser 1 3 partial
records-forms.related-list-server-pagination P1 browser 1 4 not-run
records-forms.action-param-widgets P1 mixed 1 2 partial
records-forms.upload-guard-blocks-confirm P2 browser 3 2 not-run
records-forms.import-wizard-encoding-and-hints P2 browser 1 6 partial
records-forms.action-location-matrix P1 browser 1 11 not-run
records-forms.validation-rule-type-matrix P1 api 2 3 partial
records-forms.gantt-interactions P2 browser 1 4 partial
records-forms.kanban-drag-persistence P2 browser 3 1 not-run
records-forms.form-dirty-guard P2 browser 1 3 partial
records-forms.named-import-mapping P2 api 3 1 not-run
records-forms.adhoc-filter-sort-builder P1 browser 1 3 not-run
records-forms.calendar-interactions P1 browser 1 2 not-run
records-forms.concurrent-edit-conflict P1 mixed 1 3 not-run
records-forms.record-discussion-mentions P1 browser 1 3 partial
records-forms.grid-personalization P2 browser 1 4 not-run
records-forms.saved-view-management P2 browser 3 2 not-run
records-forms.bulk-select-all-matching P2 browser 1 3 partial
records-forms.lookup-picker-create-new P2 browser 1 3 not-run
records-forms.import-job-undo-cancel P2 mixed 1 4 not-run
records-forms.object-hook-lifecycle P1 mixed 1 5 partial
records-forms.field-type-constraints P1 mixed 1 1 pass
records-forms.cascading-multilevel-and-clear P1 mixed 1 3 partial
records-forms.encrypted-field-behavior P1 mixed 1 2 pass
records-forms.field-group-visible-when P1 mixed 2 4 pass
records-forms.field-unique-enforcement P1 api 1 3 pass
records-forms.delete-behavior-matrix P1 api 1 1 pass
records-forms.record-clone-contract P2 api 1 1 pass
records-forms.field-history-tracking P1 mixed 1 1 partial
records-forms.import-transform-matrix P2 api 3 2 not-run
records-forms.predicate-relationship-traversal P1 api 1 3 partial
records-forms.script-action-hook-refusal-toast P2 browser 3 1 not-run
records-forms.write-time-option-and-element-shape-judgement P2 api 1 1 pass
records-forms.write-answer-advisories-rollback-and-tree-delete P1 api 1 1 pass
records-forms.comment-reactions-and-edit-stamps P2 api 1 1 pass
records-forms.v18-semantic-defaults P2 mixed 1 1 partial

Per-clause verdicts

A = acceptance[n], N = negative[n]. Tier 1 rule: a clause is pass only when a passing pin covers it (server-side oracles, or clauses the ref names); clauses a ref says it does not cover, and UI-oracle clauses a server-side pin cannot see, are not-run. Evidence is text from the oracle — no images.

records-forms.crud-roundtrip — pass (hand-driven (port 47461 · file:/tmp/qa18/crud/data.db · hand-driven (the automated.ref pins only acceptance[6]'s readonly half)))

clause verdict evidence
A0 pass console Create Account → POST /api/v1/data/showcase_account → 201; filtered GET total 1, every value verbatim, website null (not defaulted)
A1 pass Edit → PATCH body {annual_revenue:4200000} → 200; 23-key before/after diff changes only annual_revenue (+ engine updated_at)
A2 pass Delete dialog → DELETE → 200; filtered GET total 0; GET by id 404; reloaded list lacks the row
A3 pass post-reload list screenshots reflect create and delete with display values
A4 pass History tab: UPDATE Annual Revenue — → 4200000 and CREATE with option labels and the real actor; localized date on a second probe
A5 pass os-qa-18crud-华宁 re-reads byte-identical (UTF-8 hex compared); $search=华宁 total 2; UI quick-search shows the same 2 rows
A6 pass POST /api/v1/data/showcase_account/ID/clone → 201 new id, business values copied, id/created_at/updated_at re-derived; non-owner member clone of showcase_field_zoo → owner and created_by are the member, autonumber re-minted 0001→0003, formula re-derived; readonly half: protocol.readonly-insert.test.ts 11/11 and engine-insert-static-readonly-strip.test.ts 21/21 pass, live contact clone reports droppedFields readonly lead_score
A7 pass contributor member: GET INV-1003 → 404; POST …/INV-1003/clone → 404 RECORD_NOT_FOUND; admin invoice count 13 before and after; own-row clone 201
N0 pass empty Account Name blocks with a named field error and toast; no POST issued; count 0
N1 pass no id, audit column, autonumber or readonly value carried by a clone; RLS-invisible clone refused 404
N2 pass required-no-default field (showcase_account.name, substituted for status — see accuracy finding) missing → 400 VALIDATION_FAILED fields[0] {field name, code required}
N3 pass tax_id not-an-ein → 400 invalid_format Tax ID must look like 12-3456789. shown under the field; direct API same

records-forms.field-type-matrix — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: field-zoo-roundtrip.dogfood.test.ts 46/46 passed; field-zoo-value-shape.test.ts 45/45 passed
A1 not-run dom oracle — the pin is server-side; UI half not driven in this Tier 1 pass
A2–A6 pass pin: field-zoo-roundtrip.dogfood.test.ts 46/46 passed; field-zoo-value-shape.test.ts 45/45 passed
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.list-view-capabilities — partial (Tier 1 pin)

clause verdict evidence
A0 not-run not covered by pin (framework pin showcase-search.dogfood is search-scoped and not attributed to these clauses; objectui saved-view-filter.spec pass → A1; other objectui live specs stale or not covering)
A1 pass pin: showcase-search.dogfood.test.ts 5/5 passed; objectui@4016370a saved-view-filter.spec.ts 1/1
A2–N2 not-run not covered by pin (framework pin showcase-search.dogfood is search-scoped and not attributed to these clauses; objectui saved-view-filter.spec pass → A1; other objectui live specs stale or not covering)

records-forms.view-type-gallery — partial (Tier 1 pin)

clause verdict evidence
A0–A4 not-run not covered by a passing pin (examples/app-showcase/e2e/showcase-smoke.spec.ts 49/49 pass (SMOKE_API_URL :47431, chromium alias) → A5; page-level render does not prove A0–A4); not hand-driven in this Tier 1 pass
A5 pass pin: examples/app-showcase/e2e/showcase-smoke.spec.ts 49/49 pass (SMOKE_API_URL :47431, chromium alias) → A5; page-level render does not prove A0–A4
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.form-view-gallery — pass (hand-driven (port 47462 · file:/tmp/qa18/formgal/data.db))

clause verdict evidence
A0 pass simple / tabbed / wizard / split / drawer / modal each rendered as declared (simple 2-col; tabs Overview/Schedule/Details; stepper Step 1 of 3; split 2 panes + separator; drawer side panel on task-desk; centered modal)
A1 pass wizard: 0 data writes across Next/Back/Next/Next; Save → exactly one PATCH → 200; step order enforced and empty required blocks Next
A2 pass conditional Notes mounts at priority Urgent and unmounts at Low
A3 pass full-row diffs per variant change only the edited keys; modal create 201 re-read as submitted
A4 pass tab and step hops keep entered values
N0–N1 pass wizard blocks Next on empty required with a named error; drawer/modal scored only on task-desk; overlay reverted via DELETE /api/v1/meta/view/showcase_task.form (re-read byte-identical to stock)

records-forms.conditional-rules-header — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: objectui@4016370a e2e/live required-when-submit.spec.ts pass (R2) → A0; field-conditional-rules stale (expects disabled input, UI renders read-only text); list-row-action-cel too weak for A4
A1–A5 not-run not covered by a passing pin (objectui@4016370a e2e/live required-when-submit.spec.ts pass (R2) → A0; field-conditional-rules stale (expects disabled input, UI renders read-only text); list-row-action-cel too weak for A4); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.conditional-rules-grid — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: objectui@4016370a e2e/live grid-conditional-rules pass (R3) → A0; grid-parent-rules pass (R2) → A2; grid-file-upload stale (strict-mode collision with sr-only DialogDescription)
A1 not-run not covered by a passing pin (objectui@4016370a e2e/live grid-conditional-rules pass (R3) → A0; grid-parent-rules pass (R2) → A2; grid-file-upload stale (strict-mode collision with sr-only DialogDescription)); not hand-driven in this Tier 1 pass
A2 pass pin: objectui@4016370a e2e/live grid-conditional-rules pass (R3) → A0; grid-parent-rules pass (R2) → A2; grid-file-upload stale (strict-mode collision with sr-only DialogDescription)
A3, A4 not-run not covered by a passing pin (objectui@4016370a e2e/live grid-conditional-rules pass (R3) → A0; grid-parent-rules pass (R2) → A2; grid-file-upload stale (strict-mode collision with sr-only DialogDescription)); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.cascading-options — partial (Tier 1 pin)

clause verdict evidence
A0 not-run not covered by a passing pin (objectui@4016370a e2e/live cascading-options.spec.ts :75 pass → A1; :51 stale (expects md-form-submit on a flat ModalForm)); not hand-driven in this Tier 1 pass
A1 pass pin: objectui@4016370a e2e/live cascading-options.spec.ts :75 pass → A1; :51 stale (expects md-form-submit on a flat ModalForm)
A2–A4 not-run not covered by a passing pin (objectui@4016370a e2e/live cascading-options.spec.ts :75 pass → A1; :51 stale (expects md-form-submit on a flat ModalForm)); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.master-detail-atomic-save — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: objectui@4016370a e2e/live master-detail 2/2 (R3) → A0; summary-rollup 2/2 → A2; form-view-subforms stale (strict-mode collision)
A1 not-run not covered by a passing pin (objectui@4016370a e2e/live master-detail 2/2 (R3) → A0; summary-rollup 2/2 → A2; form-view-subforms stale (strict-mode collision)); not hand-driven in this Tier 1 pass
A2 pass pin: objectui@4016370a e2e/live master-detail 2/2 (R3) → A0; summary-rollup 2/2 → A2; form-view-subforms stale (strict-mode collision)
A3–A5 not-run not covered by a passing pin (objectui@4016370a e2e/live master-detail 2/2 (R3) → A0; summary-rollup 2/2 → A2; form-view-subforms stale (strict-mode collision)); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.related-list-server-pagination — not-run (Tier 1 pin)

clause verdict evidence
A0–A5 not-run not covered by a passing pin (objectui@4016370a e2e/live detail-related-list stale (waits for ?recordId=, row click now opens /record/ID) — no clause covered); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.action-param-widgets — partial (Tier 1 pin)

clause verdict evidence
A0, A1 not-run not covered by pin (dogfood action-params-contract pins the dispatch-time param contract; A3 needs the dialog half too; objectui action-modal.spec touches no params); not hand-driven in this Tier 1 pass
A2 pass pin: action-params-contract.dogfood.test.ts 5/5 passed
A3–N1 not-run not covered by pin (dogfood action-params-contract pins the dispatch-time param contract; A3 needs the dialog half too; objectui action-modal.spec touches no params); not hand-driven in this Tier 1 pass

records-forms.upload-guard-blocks-confirm — not-run (Tier 3)

clause verdict evidence
A0–A3, N0–N1 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.import-wizard-encoding-and-hints — partial (Tier 1 pin)

clause verdict evidence
A0–A2 pass pin: objectui@4016370a importParsers.test.ts 57/57, importMissingRequiredHint.test.tsx 2/2, importLegacyReferenceGuard.test.tsx 3/3; A3 (API rows) not pinned
A3 not-run not covered by a passing pin (objectui@4016370a importParsers.test.ts 57/57, importMissingRequiredHint.test.tsx 2/2, importLegacyReferenceGuard.test.tsx 3/3; A3 (API rows) not pinned); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.action-location-matrix — not-run (Tier 1 pin)

clause verdict evidence
A0–A4 not-run not covered by a passing pin (objectui@4016370a e2e/live action-modal pass (R3) — A2 only partly (modal opens/closes); list-row-action-cel too weak for A3); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.validation-rule-type-matrix — partial (hand-driven (port 47403 · file:/tmp/qa18/vr-matrix/data.db))

clause verdict evidence
A0 pass each 400 VALIDATION_FAILED with its code: invalid_initial_state (project status active), invalid_transition (project active→planned; account active→prospect), invalid_format (tax_id ABC; billing_email), json_schema_violation (support_config seats 0), invalid_json, rule_violation (cross_field end before start; script spent 500 over 1.2×budget; conditional churned without reason)
A1 pass fields[] targets start_date / tax_id / billing_email / support_config / status; script and conditional rules target _record
A2 pass row counts unchanged after every rejected POST; rejected PATCH rows byte-identical on re-read
A3 pass every compliant twin landed (201/200)
A4 pass PATCH health green→red → 200 with warnings [{rule project_health_progression, severity warning, code invalid_transition}]; re-read red; WARN log line present
N0 not-run an unevaluable-CEL rule cannot be authored on stock (object metadata sealed; no seeded unevaluable rule) — fixture gap
N1–N2 pass the warning rule did not block (evaluable leg); WARN log line present

records-forms.gantt-interactions — partial (Tier 1 pin)

clause verdict evidence
A0 not-run not covered by a passing pin (objectui@4016370a GanttView.autoscheduledlg 4/4, summaryedit 8/8, deptypes 2/2, scheduling.selfextent 8/8, countinterp.i18n 5/5, dnd 21/21; A0/A3 not pinned (ref says so)); not hand-driven in this Tier 1 pass
A1, A2 pass pin: objectui@4016370a GanttView.autoscheduledlg 4/4, summaryedit 8/8, deptypes 2/2, scheduling.selfextent 8/8, countinterp.i18n 5/5, dnd 21/21; A0/A3 not pinned (ref says so)
A3 not-run not covered by a passing pin (objectui@4016370a GanttView.autoscheduledlg 4/4, summaryedit 8/8, deptypes 2/2, scheduling.selfextent 8/8, countinterp.i18n 5/5, dnd 21/21; A0/A3 not pinned (ref says so)); not hand-driven in this Tier 1 pass
N0 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.kanban-drag-persistence — not-run (Tier 3)

clause verdict evidence
A0–A2, N0–N0 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.form-dirty-guard — partial (Tier 1 pin)

clause verdict evidence
A0, A1 not-run not covered by a passing pin (objectui@4016370a discardGuard.test.tsx 14/14; A0 partial (X + Cancel only), A1 not pinned); not hand-driven in this Tier 1 pass
A2 pass pin: objectui@4016370a discardGuard.test.tsx 14/14; A0 partial (X + Cancel only), A1 not pinned
N0 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.named-import-mapping — not-run (Tier 3)

clause verdict evidence
A0–A2, N0–N0 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.adhoc-filter-sort-builder — not-run (Tier 1 pin)

clause verdict evidence
A0–A4 not-run not covered by a passing pin (objectui@4016370a e2e/live user-filters :89 pass → A4 partial only; :22 stale (pre-ADR-0053 metadata)); not hand-driven in this Tier 1 pass
N0–N3 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.calendar-interactions — not-run (Tier 1 pin)

clause verdict evidence
A0–A3 not-run not covered by a passing pin (objectui@4016370a CalendarView.dnd.test.tsx 8/8 — geometry via onEventDrop only; no clause covered); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.concurrent-edit-conflict — not-run (Tier 1 pin)

clause verdict evidence
A0–A5 not-run not covered by a passing pin (objectui@4016370a occSave.test.tsx 8/8 — A1/A3 client halves only (partial clauses); live inline-edit-polish-2572 red (stale spec + consumed fixture); no whole clause); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.record-discussion-mentions — partial (Tier 1 pin)

clause verdict evidence
A0–A4 not-run not covered by pin (ref: FEEDS_DISABLED engine/API pins on their own fixtures; console half and clauses 1-5,8 not pinned); not hand-driven in this Tier 1 pass
A5, A6 pass pin: capability-gate-update-verb.test.ts 12/12 passed; comments-permission-matrix.dogfood.test.ts 10/10 passed
A7–N2 not-run not covered by pin (ref: FEEDS_DISABLED engine/API pins on their own fixtures; console half and clauses 1-5,8 not pinned); not hand-driven in this Tier 1 pass
N3 pass pin: capability-gate-update-verb.test.ts 12/12 passed; comments-permission-matrix.dogfood.test.ts 10/10 passed
N4, N5 not-run not covered by pin (ref: FEEDS_DISABLED engine/API pins on their own fixtures; console half and clauses 1-5,8 not pinned); not hand-driven in this Tier 1 pass

records-forms.grid-personalization — not-run (Tier 1 pin)

clause verdict evidence
A0–A4 not-run not covered by a passing pin (objectui@4016370a groupedPagination 7/7, groupedBooleanLabel 2/2, inlineEditPersistence 1/1 — adjacent pins, no clause covered); not hand-driven in this Tier 1 pass
N0, N1 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.saved-view-management — not-run (Tier 3)

clause verdict evidence
A0–A3, N0–N2 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.bulk-select-all-matching — partial (Tier 1 pin)

clause verdict evidence
A0, A1 not-run not covered by a passing pin (objectui@4016370a objectBulkActionDispatch 12/12, BulkActionBar 7/7, bulkActionRefresh 11/11; A0 partial, A1/A4 not pinned); not hand-driven in this Tier 1 pass
A2, A3 pass pin: objectui@4016370a objectBulkActionDispatch 12/12, BulkActionBar 7/7, bulkActionRefresh 11/11; A0 partial, A1/A4 not pinned
A4 not-run not covered by a passing pin (objectui@4016370a objectBulkActionDispatch 12/12, BulkActionBar 7/7, bulkActionRefresh 11/11; A0 partial, A1/A4 not pinned); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.lookup-picker-create-new — not-run (Tier 1 pin)

clause verdict evidence
A0–A3 not-run not covered by a passing pin (objectui@4016370a LookupField.dependsOn 6/6, RecordPickerDialog.filterOptions 12/12 — adjacent pins (ref admits), no clause covered); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.import-job-undo-cancel — not-run (Tier 1 pin)

clause verdict evidence
A0–A3 not-run not covered by a passing pin (objectui e2e/import-console + import-harness specs not run this sweep (separate configs/backends, out of the dispatched spec list)); not hand-driven in this Tier 1 pass
N0–N2 not-run negative spans the UI half not driven in this Tier 1 pass

records-forms.object-hook-lifecycle — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: showcase-public-form.dogfood.test.ts 4/4 passed; hook-error-format.dogfood.test.ts 4/4 passed
A1–N4 not-run not covered by pin (ref: dogfood pins beforeInsert stamp + beforeDelete abort error body; transition audit/over-budget/priority LOG oracles and scratch variants NOT pinned (wrapper unit tests named by source file only)); not hand-driven in this Tier 1 pass

records-forms.field-type-constraints — pass (Tier 1 pin)

clause verdict evidence
A0–N4 pass pin: field-zoo-roundtrip.dogfood.test.ts 46/46 passed; field-zoo-value-shape.test.ts 45/45 passed; engine-lookup-referential-integrity.test.ts 14/14 passed; engine-autonumber-runtime-owned.test.ts 32/32 passed

records-forms.cascading-multilevel-and-clear — partial (Tier 1 pin)

clause verdict evidence
A0 not-run not covered by pin (objectql rule-validator.option-visibility + objectui cascading-options :75 pin the server written-value gate; KNOWN-GAP clauses and lookup twin not pinned; :51 stale); not hand-driven in this Tier 1 pass
A1 pass pin: rule-validator.option-visibility.test.ts 55/55 passed
A2–N2 not-run not covered by pin (objectql rule-validator.option-visibility + objectui cascading-options :75 pin the server written-value gate; KNOWN-GAP clauses and lookup twin not pinned; :51 stale); not hand-driven in this Tier 1 pass

records-forms.encrypted-field-behavior — pass (Tier 1 pin)

clause verdict evidence
A0–N3 pass pin: secret-fields.test.ts 41/41 passed; field-zoo-roundtrip.dogfood.test.ts 46/46 passed

records-forms.field-group-visible-when — pass (hand-driven (port 47463 · file:/tmp/qa18/fgvw/data.db · scratch package com.objectstack.qa.groupgate, object qa_group_gate))

clause verdict evidence
A0 pass bare-string visibleWhen stored verbatim; envelope spelling stored as {dialect:cel, source}; both gate identically on form and detail
A1 pass visibleOn → 422 INVALID_METADATA unrecognized_keys naming visibleWhen (also with ?mode=draft); nothing landed
A2 pass vitest object-strictness-batch20.test.ts + field-group-layout.test.ts 70/70
A3 pass form toggle Basic↔Pro mounts/unmounts the group header and members; detail page re-renders after an in-page edit
A4 pass hidden-section values preserved on save (PATCH body only name; re-read unchanged)
N0–N1, N3 pass visibleOn refused with guidance; hidden values not dropped; scored on the object-level slot only
N2 pass (direction recorded: FAIL-OPEN) unknown-field predicate and syntax-broken predicate (record.kind ==) both PUT 200; both pages render with the section SHOWN and a console diagnostic … treated as its safe default (true) … [parse] Unexpected token: EOF; no blank form or crash. The spec text says fail-closed — drift filed as the negative instructs

records-forms.field-unique-enforcement — pass (Tier 1 pin)

clause verdict evidence
A0–N3 pass pin: memory-unique-constraint.test.ts 26/26 passed; sql-driver-8577-tenant-scoped-declared-unique.test.ts 39/39 passed; sql-driver-declared-index-organization-respelling.test.ts 26/26 passed

records-forms.delete-behavior-matrix — pass (Tier 1 pin)

clause verdict evidence
A0–N3 pass pin: engine-cascade-delete.test.ts 25/25 passed; engine-cascade-delete-atomic.test.ts 13/13 passed; engine-cascade-delete-multivalue-probe.test.ts 20/20 passed

records-forms.record-clone-contract — pass (Tier 1 pin)

clause verdict evidence
A0–N3 pass pin: search-clone-schema-conformance.test.ts 8/8 passed; search-clone-route-schema-conformance.test.ts 6/6 passed

records-forms.field-history-tracking — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: audit-lookup-summary.test.ts 19/19 passed; audit-option-label-summary.test.ts 13/13 passed
A1–A3 not-run not covered by pin (plugin-audit summary pins cover the rendered summary and reference titles; tab gating/derived op/untracked fallback not pinned; objectui record-history-display.spec skips without app-todo); not hand-driven in this Tier 1 pass
A4 pass pin: audit-lookup-summary.test.ts 19/19 passed; audit-option-label-summary.test.ts 13/13 passed
N0–N3 not-run not covered by pin (plugin-audit summary pins cover the rendered summary and reference titles; tab gating/derived op/untracked fallback not pinned; objectui record-history-display.spec skips without app-todo); not hand-driven in this Tier 1 pass

records-forms.import-transform-matrix — not-run (Tier 3)

clause verdict evidence
A0–A3, N0–N3 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.predicate-relationship-traversal — partial (Tier 1 pin)

clause verdict evidence
A0–A2 not-run not covered by pin (ref: acceptance[3] ONLY); not hand-driven in this Tier 1 pass
A3 pass pin: engine-predicate-relationship.test.ts 45/45 passed
N0–N2 not-run not covered by pin (ref: acceptance[3] ONLY); not hand-driven in this Tier 1 pass

records-forms.script-action-hook-refusal-toast — not-run (Tier 3)

clause verdict evidence
A0–A3, N0–N3 not-run Tier 3 deferred by the 18.0 release-sweep plan

records-forms.write-time-option-and-element-shape-judgement — pass (Tier 1 pin)

clause verdict evidence
A0–A4 pass pin: rule-validator.option-visibility.test.ts 55/55 passed; engine-field-predicate-fault.test.ts 19/19 passed; import-kept-option-values.test.ts 7/7 passed; record-validator.kept-option-values.test.ts 6/6 passed; validate-update-stored-row.test.ts 18/18 passed; validate-preview-parent.test.ts 21/21 passed; engine-multi-reference-element-shape.test.ts 29/29 passed

records-forms.write-answer-advisories-rollback-and-tree-delete — pass (Tier 1 pin)

clause verdict evidence
A0–N0 pass pin: advisory-write-answer.test.ts 21/21 passed; engine-after-hook-abort-unit.test.ts 14/14 passed; engine-cascade-delete.test.ts 25/25 passed; engine-cascade-delete-tree.test.ts 28/28 passed; delete-behavior-referenceless-tree.test.ts 8/8 passed

records-forms.comment-reactions-and-edit-stamps — pass (Tier 1 pin)

clause verdict evidence
A0–A3 pass pin: sys-comment-reaction.object.test.ts 8/8 passed; comment-reaction-own-record-floor.test.ts 4/4 passed; comment-edit-stamp.integration.test.ts 10/10 passed; sys-comment-reactions-door.integration.test.ts 2/2 passed; activity-field-redaction.test.ts 19/19 passed

records-forms.v18-semantic-defaults — partial (Tier 1 pin)

clause verdict evidence
A0 pass pin: field-autonumber-default-unique.test.ts 9/9 passed; view.test.ts 463/463 passed; record-surface.test.ts 15/15 passed
A1 not-run dom oracle — the pin is server-side; UI half not driven in this Tier 1 pass
A2, A3 not-run screenshot oracle — the pin is server-side; UI half not driven in this Tier 1 pass

Reproduction rules

No clause scored fail in this selector. One negative recorded a contract drift that its own text asks to be filed:

records-forms.field-group-visible-when · negative[2] — a faulting field-group visibleWhen renders the section (fail-OPEN) while the spec declares fail-CLOSED

  1. Boot the canonical showcase. As admin create a writable package (POST /api/v1/packages with a manifest) and an object in it with one field group whose visibleWhen faults — e.g. "record.no_such_field == 'x'" (unknown field) or "record.kind ==" (syntax-broken): PUT /api/v1/meta/object/qa_group_gate?package=PKG → 200 (both shapes accepted at authoring).
  2. Publish, create a record, open its edit form (/record/ID/edit) and its detail page.
  3. Actual: the group's section (header + members) is SHOWN on both surfaces; the browser console logs [object-ui] A conditional predicate failed to evaluate (visibleWhen of group 'pro_details' …) and was treated as its safe default (true) … [parse] Unexpected token: EOF. No blank form, no crash (the clause's FAIL shape did not occur).
  4. Declared contract: packages/spec/src/data/object.zod.ts ObjectFieldGroupSchema.visibleWhen describe — "the whole group (header included) is shown only when TRUE, else hidden (fail-closed)"; ADR-0137's scope note names this slot as carrying its OWN declared fail-closed direction, distinct from the field-rule triad's render fail-open (ADR-0137 D3).
  • Disposition: product defect against the declared contract (renderer half in objectui). Extracted at close-out. The negative itself scores pass (no blank/crash); the direction is recorded, not ticked.

Derived item verdicts

11 pass · 19 partial · 14 not-run. The P0 records-forms.crud-roundtrip was hand-driven in full and passed (its pin covers only half of acceptance[6]). Partials are Tier 1 items whose pins (framework vitest or objectui at 4016370a) cover part of the clauses — uncovered clauses are not-run rows above — plus validation-rule-type-matrix (N0 needs an unevaluable rule that stock cannot author).

Checklist-accuracy findings / fixture gaps (for the wave anchor card)

  • objectui live specs red against their own same-sha console (4016370a), all stale-spec, none a product defect: user-filters.spec.ts :22/:43/:128 assert pre-ADR-0053 showcase metadata (status presets moved to named views; six visualizations incl. timeline) and :73 uses a cell locator where the grid exposes gridcell; form-view-subforms.spec.ts and grid-file-upload.spec.ts collide in strict mode with the sr-only DialogDescription; field-conditional-rules.spec.ts expects a disabled input where the UI renders read-only text; cascading-options.spec.ts:51 expects md-form-submit on a flat ModalForm; detail-related-list.spec.ts waits for ?recordId= where a row click now opens /record/ID; inline-edit-polish-2572.spec.ts expects the approval-locked path but manager_review is deliberately lockRecord: false, and it consumes its fixture (needs a fresh DB). Under the objectui Vite dev server several specs need more than the default 30 s budget (timing, not product).
  • Pins that exercise none of their item's clauses: calendar-interactions (geometry via callback only), grid-personalization, lookup-picker-create-new (adjacent, as its ref admits), action-param-widgets' objectui half (action-modal.spec.ts has no params); list-row-action-cel.spec.ts is too weak for action-location-matrix A3 / conditional-rules-header A4; record-history-display.spec.ts needs an app-todo backend and always skips against showcase; concurrent-edit-conflict's occSave unit pin covers client halves only. import-job-undo-cancel's import-console / import-harness specs were not run this sweep.
  • records-forms.list-view-capabilities: its framework ref showcase-search.dogfood.test.ts is search-scoped; no list-view clause is attributable to it.
  • records-forms.crud-roundtrip: acceptance[6]'s cloner-ownership half needs a non-owner cloner (an admin cloning an admin row cannot tell the two apart; showcase_field_zoo + the contributor member also covers autonumber and formula); negative[2] names status but the required-no-default field on showcase_account is name. objectui observations: History renders the currency diff unformatted (4200000); after a RecordFormPage edit save a direct load lands on /_console/home.
  • records-forms.form-view-gallery: the revert door is DELETE /api/v1/meta/view/NAME (resets the overlay byte-identically); the named variants are served as their own view items showcase_task.{tabbed,wizard,split,quick}.
  • records-forms.field-group-visible-when: authoring accepts a syntactically invalid CEL visibleWhen (record.kind ==) with 200 — no parse-time check on this slot; the grouped section renders above the ungrouped fields; the item cites objectui 1fb1ced36243 as the pin, now 4016370af3c9.
  • records-forms.validation-rule-type-matrix: fixtures call account_lifecycle the state-machine specimen but it binds update only — invalid_initial_state comes from project_status_flow alone; negative[0] needs an unevaluable-CEL rule that stock cannot author (fixture gap).
  • records-forms.picklist-shared-across-objects — planned (not run, not counted).

Hand-off (items without a judged verdict)

  • Tier 3 deferred by the 18.0 release-sweep plan (not-run): upload-guard-blocks-confirm, kanban-drag-persistence, named-import-mapping, saved-view-management, import-transform-matrix, script-action-hook-refusal-toast (all P2).
  • Tier 1 items whose pin covered no whole clause and that were not hand-driven this run (not-run): related-list-server-pagination, action-location-matrix, adhoc-filter-sort-builder, calendar-interactions, concurrent-edit-conflict (P1); grid-personalization, lookup-picker-create-new, import-job-undo-cancel (P2).
  • Partial items' uncovered clauses are listed per item above (not-run rows).

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out — extraction (checklist-test SKILL §5). No clause of this record scored FAIL. The one contract drift that records-forms.field-group-visible-when negative[2] asks to be filed is extracted below. Partial-coverage gaps (the not-run rows) and the checklist-accuracy findings / fixture gaps in the body are handed to the wave's anchor card through the dispatch session.

    Extracted: objectstack-ai/objectui#13055 · records-forms.field-group-visible-when · negative[2]
    

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Parked-on: #24579 · this record's checklist-accuracy findings, fixture gaps, partial coverage gaps and not-run handover (wave anchor §2–§4)


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Superseded-by: #24616

    Round 2 at ba4afcc re-judged this record's A-class unjudged clauses (26 records-forms items re-judged — 24 partial/not-run items now PASS, conditional-rules-grid negative[1] and action-location-matrix acceptance[2]/negative[2] FAIL (objectui), field-type-matrix stays partial (acceptance[1] blocked by fixture)) and carried every other verdict forward to #24616 (Carried-forward: lines there, valid for 5b14b7f). B-class gaps stay parked on #24579.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions