Repository navigation
Description
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Part of #27377 (wave 4, W4-C2b)
Selector release-18.3.0-w4-c2b: Tier 1 half B of the 18.3.0 release-candidate sweep, wave 4. It covers the 86 pinned, non-P0 items in dashboards, i18n, identity-auth, integration-system, platform-core, records-forms, search and studio-authoring, as the wave-4 brief lists them (computed from the ledger at the subject). This is a release-candidate rerun (SKILL §5 trigger 1), dispatched from the 18.3.0 release-planning thread. It is a QA run, not a lane card.
Result: 86/86 judged · 7 PASS / 79 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN. No item is planned. Clause rows: 185 pass, 315 partial, 186 skipped, 2 blocked, 0 fail (688 in all).
Coverage mode: this card ran the pins, not the live legs. The wave-4 brief scopes C2b to "build closure only; run each item's automated.ref in per-area vitest batches", the same as W4-C2a. So a clause whose oracle sits on a live or browser leg that no pin drives is skipped here, and a pin that stops below its clause's oracle layer scores that clause partial (RUNNER rule 6). Wave 3 (#27438) drove those live legs with a full console and 12 runners. So the PASS→PARTIAL deltas below are this coverage mode, not regressions: no pin failed. For the same reason, the four wave-3 FAILs were not re-driven here (see the delta section).
1. Environment fingerprint
- Framework:
objectstack-ai/objectstack@7fa9873f38f7a0158e3ce17338dcc0f446b113e3, detached; it never followedmainor the Version PR chore: version packages #26517.ui/is in the same tree. The subject's push CI (Live E2E UI included) is green. - Build: cold tree.
npm_config_nodedir=/opt/node22 pnpm install --frozen-lockfile(25 s), thenpnpm exec turbo run build --concurrency=2underscripts/pm/os-verify-lock.sh: 118/118 tasks, 16m03s. That build also wrotepackages/console/dist.check-dev-prereqs: 106 artefacts present. Node v22.23.4, pnpm 10.31.0, Playwright chromium build 1243 from/opt/pw-browsers, 4 CPUs, about 15 GiB. - Pins: one vitest invocation per package (32 batches), sequential,
--maxWorkers=1,ui/jsdom suites from theui/root. The one cli*.e2e.test.*ran in its own invocation underOS_TEST_TIERS=nightly. Bare basenames and brace lists in the refs were resolved to repo paths before the run (273 files named; 257 vitest files plus 16 Playwright specs). - Boots for the Playwright pins:
- Showcase A:
OS_PORT=41501 OS_STORAGE_LOCAL_ROOT=RUN/uploads setsid pnpm -C examples/app-showcase exec objectstack dev --ui --no-watch --seed-admin -p 41501 -d file:RUN/data.db. - Showcase B (the CI Live E2E UI shape):
OS_PORT=41510 OS_CLOUD_URL=off objectstack dev --seed-admin --fresh --no-watch --no-compile -p 41510. - app-crm (for import-console-undo, whose defaults are
crm_app/crm_lead):objectstack dev --seed-admin --fresh --no-watch -p 41530. - Console:
VITE_BASE_PATH=/ vite buildofui/apps/consoleinto a scratch dir, served byvite previewwithDEV_PROXY_TARGETon 5190 / 5191 / 5193, the topology the CI Live E2E UI job uses. Also a vite dev server on 5180 (see §6).
- Showcase A:
- Seed:
--seed-admin(admin@objectos.ai) plus the stock showcase and CRM seeds. - Clock: 2026-11-02 03:35Z to 05:00Z (UTC).
- Execution: one runner session ran every build, pin, spec and probe itself. Five scoring subagents (effort high, one per area group) then mapped the captured output to clauses, reading each pin's harness for its layer. The runner checked their verdicts against the evidence and downgraded six rows (§3 note).
2. Scope: selector and the revision each verdict is valid for
- dashboards (3): dataset-report-authoring r4, empty-null-bucket-boundaries r2, analytics-exposure-gate-and-measure-aggregate r3
- i18n (2): surface-matrix r13, flow-copy-translation-and-host-override r3
- identity-auth (8): auth-method-matrix r10, invitation-scope-gates r6, admin-lifecycle-operations r10, implicit-account-linking-ownership r5, auth-gate-held-session-raw-host-families r4, api-key-expiry-lifecycle r3, cookie-session-renewal-in-process r2, import-invitation-and-sso-domain-answers r3
- integration-system (11): connector-declarative-boot r6, connector-stdio-default-deny r3, connector-descriptor-audit r3, email-template-render r12, datasource-admin-lifecycle r8, external-schema-introspection r8, external-schema-drift-gate r6, connector-auth-kind-application r5, external-schema-browser-ui r7, inbound-mailbox-association r3, notification-org-and-redeliver-eligibility r5
- platform-core (11): metadata-registry-serving r4, metadata-authoring-roundtrip r8, interrupted-migration-boot-report r3, activation-ledger-registration-home r7, activation-ledger-row-contract r9, url-overlay-contract r4, lifecycle-retention-sweep r8, settings-audit-secret-fingerprint r5, protocol-18-handshake-and-stored-replay r3, settings-organization-isolation-and-platform-rung r6, serve-composition-v18 r4
- records-forms (30): field-type-matrix r8, list-view-capabilities r8, view-type-gallery r3, conditional-rules-header r8, conditional-rules-grid r11, cascading-options r7, master-detail-atomic-save r9, related-list-server-pagination r11, action-param-widgets r6, import-wizard-encoding-and-hints r9, gantt-interactions r8, form-dirty-guard r7, adhoc-filter-sort-builder r8, concurrent-edit-conflict r5, record-discussion-mentions r13, bulk-select-all-matching r6, import-job-undo-cancel r8, object-hook-lifecycle r11, field-type-constraints r6, cascading-multilevel-and-clear r9, encrypted-field-behavior r7, field-unique-enforcement r13, delete-behavior-matrix r5, record-clone-contract r3, field-history-tracking r11, predicate-relationship-traversal r6, write-time-option-and-element-shape-judgement r2, write-answer-advisories-rollback-and-tree-delete r3, comment-reactions-and-edit-stamps r5, v18-semantic-defaults r6
- search (3): cross-field-object-search r4, field-scoped-narrowing r3, global-search-skips-unreadable r5
- studio-authoring (18): object-designer-roundtrip r10, record-page-roundtrip r11, org-override-registry-gate r7, expression-editors r8, permission-matrix-editor-ux r7, metadata-diagnostics-sweep r10, meta-save-preconditions-and-draft-rows r2, multi-package-item-rows r4, save-door-runs-authoring-rules r4, held-edit-publish-refusal r3, automations-rail-and-new-flow r2, org-scope-flows r2, flow-status-matches-runtime r2, validation-rules-authoring r3, hooks-tab-authoring r3, actions-tab-presets r3, object-api-tab-curl r2, interfaces-create-dialogs r2
Every revision equals the one in the wave-4 item list and in the area file at the subject.
3. Tier 1 pins (RUNNER rule 6)
Vitest: 257 files across 32 packages, 5,559 tests passed, 0 failed, 0 skipped. Every file a ref names exists at the subject and collected tests.
| package | files / tests |
|---|---|
| packages/qa/dogfood | 49 / 378 |
| packages/objectql | 29 / 728 |
| ui (app-shell 29, plugin-grid 7, plugin-gantt 6, plugin-detail 2, plugin-form 2, components 1, apps/console 1) | 48 / 534 |
| packages/runtime | 16 / 221 |
| packages/rest | 14 / 193 |
| packages/spec | 12 / 1077 |
| packages/metadata-protocol | 10 / 446 |
| packages/cli (+ nightly tier) | 8 / 97 + 1 / 2 |
| packages/plugins/plugin-audit | 8 / 111 |
| packages/services/service-datasource | 8 / 252 |
| packages/plugins/plugin-auth | 7 / 161 |
| packages/services/service-automation · service-settings · service-mailbox · service-analytics | 6/208 · 6/133 · 5/74 · 4/66 |
| the other 18 packages | 1–3 files each, all green |
Playwright specs:
| spec | result |
|---|---|
examples/app-showcase/e2e/showcase-smoke.spec.ts |
50 passed, twice |
ui/e2e/live: cascading-options, field-conditional-rules, form-view-subforms, grid-conditional-rules, grid-parent-rules, inline-edit-polish-2572, master-detail, record-history-display, required-when-submit, saved-view-filter, user-filters |
18 passed |
ui/e2e/live/studio-editor.spec.ts, studio-object-designer.spec.ts |
6 passed, three times, on the CI topology (preview console). On a vite dev server with VITE_SERVER_URL set they failed 3/3 (§6) |
ui/e2e/import-console/import-console-undo.spec.ts |
passed twice (IMPORT_CONSOLE_LIVE=1, app-crm boot) |
ui/e2e/import-harness/import-undo.spec.ts |
skipped itself: its harness config ui/packages/plugin-grid/demo/vite.live.config.ts no longer exists, so it evidences nothing |
Each clause row names the layer its pin drives. A booted stack answering through Hono app.request counts as the HTTP layer, as in wave 3 and W4-C2a.
Runner downgrades of scorer rows (all pass → partial): search.global-search-skips-unreadable A1, A2, N0, N2 (the ref says this planted-pair pin never reads the stock fixture the clauses name); records-forms.record-discussion-mentions A8 (the unit fallback oracle applies only once the live milestone channel is shown unavailable, which was not driven); integration-system.connector-stdio-default-deny A3 (the green pin is connector-declarative-boot's ref, not this item's).
4. Derived item verdicts
Derivation: FAIL if any clause fails; PASS if every clause passes (SCOPE-pointer rows excluded); otherwise PARTIAL when any clause passed or partially passed.
- PASS (7): records-forms.object-hook-lifecycle, records-forms.encrypted-field-behavior, records-forms.predicate-relationship-traversal, records-forms.write-time-option-and-element-shape-judgement, records-forms.write-answer-advisories-rollback-and-tree-delete, records-forms.comment-reactions-and-edit-stamps, search.cross-field-object-search.
- FAIL (0). No reproduction rule is owed.
- PARTIAL (79), each with what kept it below PASS:
- dashboards.dataset-report-authoring: only acceptance[0] is pinned; [1]-[7] and both negatives are live legs
- dashboards.empty-null-bucket-boundaries: only the two test-oracle clauses are pinned; the render/network/api legs are live
- dashboards.analytics-exposure-gate-and-measure-aggregate: A1-A3 pinned below their api/log layer (engine/plugin-unit); CUBE_NOT_FOUND and the dimension-column half unasserted
- i18n.surface-matrix: A5-A8 pinned only partly (jsdom, or one key / subset at HTTP); every screenshot leg and A9/A10 are live
- i18n.flow-copy-translation-and-host-override: A1-A4 pinned below their api/build layer
- identity-auth.auth-method-matrix: 4 of 10 acceptance clauses pinned, 3 of them only partly; the rest are live
- identity-auth.invitation-scope-gates: A0 pending half, A4-A6 and N2 are live legs
- identity-auth.admin-lifecycle-operations: ban enforcement, revoke live-session, stop-impersonating, owned-row reads, non-admin state reads and the invite-only walled boot are live
- identity-auth.implicit-account-linking-ownership: A0-A3 and N0-N3 pinned at unit layer only; the booted OIDC fixture leg is live
- identity-auth.auth-gate-held-session-raw-host-families: A1-A3 and N0 pinned below the booted HTTP door
- identity-auth.api-key-expiry-lifecycle: A2 no-key half and A3 pinned only at unit layer
- identity-auth.cookie-session-renewal-in-process: A1's meta leg is unpinned
- identity-auth.import-invitation-and-sso-domain-answers: A1-A3 pinned only over a memory-engine mount
- integration-system.connector-declarative-boot: only negative[0] is pinned whole; acceptance[0]-[2] pinned for the mcp half only, acceptance[3]-[5] and negative[1] below their oracle layer
- integration-system.connector-stdio-default-deny: boot-output clauses acceptance[0]-[2] and negative[1] are pinned only at the provider unit
- integration-system.connector-descriptor-audit: boot-half pinned in process only; the reload path and provider-bound carve-out are live legs
- integration-system.email-template-render: acceptance[6] unpinned; every other clause pinned only in half or below its oracle layer (unit service, route layer over a mail double)
- integration-system.datasource-admin-lifecycle: every api clause is pinned only at the route layer over stubbed services or at the service unit; negative[2] unpinned
- integration-system.external-schema-introspection: live mount over the real sqlite fixture, the draft twin and the 403 message are unpinned; most clauses pinned only at route or service layer
- integration-system.external-schema-drift-gate: the boot-log clauses acceptance[0]-[3] and negatives 0/1/3/5 need an induced-drift / federation-free served boot; pinned only at the plugin over stubs
- integration-system.connector-auth-kind-application: no echo-upstream or served-boot leg; every clause pinned only at provider/engine/schema layer, oauth2 half unpinned
- integration-system.external-schema-browser-ui: only acceptance[6] is a test-oracle clause; the panel render, network and api legs are live and out of this card
- integration-system.inbound-mailbox-association: live api clauses need the IMAP fixture (knownGaps[0]); association/attachment pinned at engine only, the member-vs-holder read not at all
- integration-system.notification-org-and-redeliver-eligibility: the three api clauses are pinned only in process (engine, service unit, LiteKernel door); served reads are the live leg
- platform-core.metadata-registry-serving: acceptance[3]-[6] are live reads outside this card; acceptance[0] pinned in half
- platform-core.metadata-authoring-roundtrip: the ref names no pin that scores a clause; only protocol-layer evidence for the package gate
- platform-core.interrupted-migration-boot-report: the boot-log/api clauses need the three-boot live sequence; only the two degradation arms are test-oracle
- platform-core.activation-ledger-registration-home: negative[2] (second registrant boot failure) is live-only by its own text
- platform-core.activation-ledger-row-contract: the generic-door 405s, the unique index, the INSERT probes and the sharing_rule/webhook reads are live legs; most clauses pinned in half
- platform-core.url-overlay-contract: browser surface: every screenshot/network clause is a live leg; the ci(spec): retire the
generatedpaths filter — every artifact gate moves to the unfiltered required job #4292 fail-closed matrix is pinned at component layer only - platform-core.lifecycle-retention-sweep: the real-timer, onlyWhen and kill-switch legs need the live boot; the class-vocabulary build read is outside this card
- platform-core.settings-audit-secret-fingerprint: the ledger rows are never read back over the API; acceptance[0]-[4] pinned at the service over stub sinks only
- platform-core.protocol-18-handshake-and-stored-replay: acceptance[1]-[3] pinned only below their door/boot layer
- platform-core.settings-organization-isolation-and-platform-rung: the api clauses are pinned in process only; the walled legs need a walled boot (knownGaps[0])
- platform-core.serve-composition-v18: acceptance[5] is pinned on the plugin's Hono mount, not on a served boot
- records-forms.field-type-matrix: live legs not driven A1
- records-forms.list-view-capabilities: partial A0,A1,A5,A7; live legs not driven A2,A3,A4,A6,A8,A9,N0,N1,N2
- records-forms.view-type-gallery: partial A1,A2; live legs not driven A0,A3,A4,N0,N1
- records-forms.conditional-rules-header: partial A2,A5; live legs not driven A4,N2
- records-forms.conditional-rules-grid: partial A0,A2,N1; live legs not driven A1,A3,A4,N0
- records-forms.cascading-options: partial A0,A2; live legs not driven A3
- records-forms.master-detail-atomic-save: partial A0,A3,N1
- records-forms.related-list-server-pagination: partial A1,A4,A5,N1,N2; live legs not driven A0,A2,A3,N0
- records-forms.action-param-widgets: partial A3; live legs not driven A0,A1
- records-forms.import-wizard-encoding-and-hints: partial A3,N1; live legs not driven N0
- records-forms.gantt-interactions: partial A0,A1,A2; live legs not driven A3,N0
- records-forms.form-dirty-guard: partial A0,N0; live legs not driven A1
- records-forms.adhoc-filter-sort-builder: partial A4; live legs not driven A0,A1,A2,A3,N0,N1,N2,N3
- records-forms.concurrent-edit-conflict: partial A1,A3,N0,N2; live legs not driven A0,A2,A4,A5,N1
- records-forms.record-discussion-mentions: partial A0,A4,A5,A6,A9,N1,N2,N3,N4,N5,N6; live legs not driven A1,A2,A3,A7,N0
- records-forms.bulk-select-all-matching: every clause pinned only at component-jsdom over a mocked data source; live network/api/dom legs not driven
- records-forms.import-job-undo-cancel: cancel legs unpinned; per-row results, marker-filter count and post-revert revertedAt not read by the spec
- records-forms.field-type-constraints: refusal codes (max_length, range, scale, invalid_option, invalid_type) unpinned; reference/autonumber only at engine
- records-forms.cascading-multilevel-and-clear: picker network leg (A3) unpinned; A0 submit half and A1 verify vector/message key not asserted
- records-forms.field-unique-enforcement: predicate updateMany has no REST door; that half rests on the memory-driver pin
- records-forms.delete-behavior-matrix: api clauses pinned only at the engine layer; no REST DELETE pin
- records-forms.record-clone-contract: gate, not-found and override-forge legs unpinned; body shape only at protocol/mock-route level
- records-forms.field-history-tracking: read-gate network legs (A2 absence half, N1) not driven by any pin
- records-forms.v18-semantic-defaults: browser legs A1–A3 outside this pins-only card
- search.field-scoped-narrowing: A1/A3/A4 and both negatives pinned at route-handler level; A2 unpinned
- search.global-search-skips-unreadable: A1/A2/N0/N2 pinned at HTTP on a planted pair only, not the stock fixture; A0 count half, A3 row scope and A4 hidden field are not pinned end to end
- studio-authoring.object-designer-roundtrip: live e2e drives a sibling door (All-metadata designer) and a draft, not the Studio Data pillar publish; reorder/edit and the 3-option published read unpinned
- studio-authoring.record-page-roundtrip: only the picker clause passes; Kind=full create, publish read and end-user render are the live leg
- studio-authoring.org-override-registry-gate: unit pin over a mock engine stops above HTTP; no artifact-backed overlay and no DELETE reset driven
- studio-authoring.expression-editors: jsdom/unit pins only; screenshot, dom and api legs (returnType stamp, held save, publish parity) not driven
- studio-authoring.permission-matrix-editor-ux: jsdom repaint only; saved fields map and narrow-viewport scroll not driven
- studio-authoring.metadata-diagnostics-sweep: only the outage pin scores; REST sweep, scoping, refusals at the door and both browser surfaces are the live leg
- studio-authoring.meta-save-preconditions-and-draft-rows: pins stop above HTTP (RestServer over a mock server, repository and protocol units); api clauses are the live leg
- studio-authoring.multi-package-item-rows: pins stop above HTTP (protocol, REST handler, HttpDispatcher); api clauses are the live leg
- studio-authoring.save-door-runs-authoring-rules: pins run saveMetaItem over a stub engine; the HTTP door answers and read-backs are the live leg
- studio-authoring.held-edit-publish-refusal: jsdom over a client double; toast screenshot, network trace and publish-drafts answer not driven; Data-pillar case unpinned
- studio-authoring.automations-rail-and-new-flow: jsdom only; rail grouping and legend unpinned; draft read not driven
- studio-authoring.org-scope-flows: jsdom over a save/publish double; drafts row, network trace and live read not driven
- studio-authoring.flow-status-matches-runtime: jsdom against a _status double; live pairing, runs and the scheduled-work boot not driven
- studio-authoring.validation-rules-authoring: jsdom/spec-schema only; invalid-condition hold, publish and per-type enforcement not driven
- studio-authoring.hooks-tab-authoring: jsdom over a client double; drafts read, runtime gating and retry/On Error not driven
- studio-authoring.actions-tab-presets: jsdom/spec-schema only; member-side runs, script action and ai.exposed not driven
- studio-authoring.object-api-tab-curl: jsdom only; the copied cURLs are never run against the server
- studio-authoring.interfaces-create-dialogs: jsdom over a save double; PUT answers, published app and launcher not driven
The two blocked rows: identity-auth.auth-method-matrix N2 (dependency: no magic-link or passkey login UI, objectui#4179 closed not_planned) and integration-system.inbound-mailbox-association A3 (fixture: knownGaps[0], no IMAP double or sync composition in the repo).
5. Delta against wave 3 (#27438, at c4c515a)
PASS→PARTIAL: 70 · PARTIAL→PARTIAL: 5 · FAIL→PARTIAL: 4 · PASS→PASS: 6 · PARTIAL→PASS: 1.
- PASS→PARTIAL (70): coverage mode. Wave 3 scored these from live or browser legs this pins-only card did not drive. No pin regressed. Items: dashboards.dataset-report-authoring, dashboards.empty-null-bucket-boundaries, dashboards.analytics-exposure-gate-and-measure-aggregate, i18n.surface-matrix, i18n.flow-copy-translation-and-host-override, identity-auth.invitation-scope-gates, identity-auth.admin-lifecycle-operations, identity-auth.implicit-account-linking-ownership, identity-auth.auth-gate-held-session-raw-host-families, identity-auth.api-key-expiry-lifecycle, identity-auth.cookie-session-renewal-in-process, identity-auth.import-invitation-and-sso-domain-answers, integration-system.connector-declarative-boot, integration-system.connector-stdio-default-deny, integration-system.connector-descriptor-audit, integration-system.datasource-admin-lifecycle, integration-system.external-schema-introspection, integration-system.connector-auth-kind-application, integration-system.external-schema-browser-ui, integration-system.notification-org-and-redeliver-eligibility, platform-core.metadata-registry-serving, platform-core.metadata-authoring-roundtrip, platform-core.interrupted-migration-boot-report, platform-core.activation-ledger-registration-home, platform-core.activation-ledger-row-contract, platform-core.url-overlay-contract, platform-core.lifecycle-retention-sweep, platform-core.settings-audit-secret-fingerprint, platform-core.protocol-18-handshake-and-stored-replay, platform-core.settings-organization-isolation-and-platform-rung, records-forms.field-type-matrix, records-forms.list-view-capabilities, records-forms.view-type-gallery, records-forms.conditional-rules-header, records-forms.conditional-rules-grid, records-forms.cascading-options, records-forms.master-detail-atomic-save, records-forms.related-list-server-pagination, records-forms.action-param-widgets, records-forms.import-wizard-encoding-and-hints, records-forms.form-dirty-guard, records-forms.adhoc-filter-sort-builder, records-forms.concurrent-edit-conflict, records-forms.record-discussion-mentions, records-forms.bulk-select-all-matching, records-forms.import-job-undo-cancel, records-forms.field-type-constraints, records-forms.cascading-multilevel-and-clear, records-forms.field-unique-enforcement, records-forms.delete-behavior-matrix, records-forms.record-clone-contract, records-forms.v18-semantic-defaults, search.field-scoped-narrowing, search.global-search-skips-unreadable, studio-authoring.object-designer-roundtrip, studio-authoring.record-page-roundtrip, studio-authoring.org-override-registry-gate, studio-authoring.permission-matrix-editor-ux, studio-authoring.metadata-diagnostics-sweep, studio-authoring.meta-save-preconditions-and-draft-rows, studio-authoring.multi-package-item-rows, studio-authoring.save-door-runs-authoring-rules, studio-authoring.held-edit-publish-refusal, studio-authoring.automations-rail-and-new-flow, studio-authoring.org-scope-flows, studio-authoring.flow-status-matches-runtime, studio-authoring.validation-rules-authoring, studio-authoring.hooks-tab-authoring, studio-authoring.actions-tab-presets, studio-authoring.interfaces-create-dialogs.
- FAIL→PARTIAL (4): not re-judged, not fixed by this record. The wave-3 FAIL clauses were live legs, and this card scored them
skipped. Their extracted cards: integration-system.email-template-render N0 → email templates: after a source edit and hot reload, the by-name read serves the new template while the list read and every send keep the old copy until a cold restart #27488 (closed 10-29); records-forms.field-history-tracking A2 → checklist: re-point records-forms.field-history-tracking acceptance[2] to the record page v3 Timeline › Changes stream — the History tab it asserts was removed by design (#27055) #27492 (re-point, closed 10-29); studio-authoring.object-api-tab-curl A1/A2/N0 → Studio API tab: the example body puts the placeholder id "related_record_id" into every reference field (owner_id included), so the copied Create/Update cURL is refused 400 reference_not_found #27490 (closed 10-29); studio-authoring.expression-editors A2/A4/A6/N0/N1 → Studio: an expression the engine refuses (RLS USING on a formula field, a null-unsafe validation predicate) keeps autosaving — the server verdict is shown on the field but never holds the save #27482 (still open) and Studio Data › Form: closing the field inspector releases the CEL error hold and autosaves the broken formula (returnType dropped); switching object discards the held edit silently #27485 (closed 10-29). W4-C3b1 carries the live retest of expression-editors. The other three are owed a live retest (SKILL §5 trigger 2), listed on [sweep] v18.3.0 release test sweep #27377. - PARTIAL→PASS (1): records-forms.encrypted-field-behavior. Its wave-3 blocked A3/N1 (no unwired boot) are now pinned at the REST door:
encrypted-field-behavior.dogfood.test.tsdrives the fail-closed write on a scratch stack with the provider unset. - PARTIAL→PARTIAL (5): identity-auth.auth-method-matrix, integration-system.external-schema-drift-gate, integration-system.inbound-mailbox-association, platform-core.serve-composition-v18, records-forms.gantt-interactions.
- PASS→PASS (6): records-forms.object-hook-lifecycle, records-forms.predicate-relationship-traversal, records-forms.write-time-option-and-element-shape-judgement, records-forms.write-answer-advisories-rollback-and-tree-delete, records-forms.comment-reactions-and-edit-stamps, search.cross-field-object-search.
- This record does not supersede QA run · release-18.3.0-w3-tier1-b (89/89) · c4c515ad · 2026-10-29 · 79 PASS / 6 PARTIAL / 4 FAIL / 0 BLOCKED / 0 NOT-RUN #27438: it re-judged the pinned layer only, so the wave-3 live-leg verdicts stay on QA run · release-18.3.0-w3-tier1-b (89/89) · c4c515ad · 2026-10-29 · 79 PASS / 6 PARTIAL / 4 FAIL / 0 BLOCKED / 0 NOT-RUN #27438.
6. Off-clause probes (RUNNER rule 8)
About 15 min, on showcase boot A, as admin and as a cross-origin browser page. Doors: GET /api/v1/search (empty q, a no-hit q, objects= an unknown name), POST /data/showcase_account/query (searchFields unknown and empty), GET /meta/:type (unknown type), GET /meta/object/:name (unknown name), GET /meta/dashboard/:name?state=draft (no draft), PUT /meta/view/ (empty name), GET /i18n/translations/zz-ZZ, GET /data/showcase_account/:id (unknown id), and the CORS preflight and cross-origin PUT /meta/page/:name?mode=draft. Boundary classes: empty string, unknown id or name, missing draft, and a cross-origin caller.
- Every same-origin answer was coded and named the problem (400
VALIDATION_FAILED/ invalid_request, 404RESOURCE_NOT_FOUND/RECORD_NOT_FOUND/NO_DRAFT, 405METHOD_NOT_ALLOWED), or was the documented empty answer (objects=unknown equals a no-such-object scope, by design;zz-ZZan empty map). - One product defect, extracted (its number is in the close-out comment): the default CORS policy (
DEFAULT_CORS_ALLOW_HEADERS/DEFAULT_CORS_EXPOSE_HEADERSinplugin-hono-server) allowsIf-Matchbut notIf-None-Match, and exposes noETag. From a page on another origin, a draftPUTwithIf-None-Match: *dies at the preflight (TypeError: Failed to fetch), while the samePUTwith no conditional header answers 200 and withIf-Matchanswers 409. This is why studio-editor "Add block … stored" and studio-object-designer F4 timed out 3/3 waiting for the draftPUTon a vite dev server withVITE_SERVER_URLset: the Studio's first-draft saves sendifNoneMatch: '*'. On the same-origin preview topology they pass. The card scopes itself away from the console's ruled split-host mode (objectui#5702). - Observed, not extracted: on a stack with no crypto provider, the refused secret write answers
500 INTERNAL_ERRORand keeps its fail-closed message server-side (records-forms.encrypted-field-behavior A3 pin). No stock boot runs without a provider, and the clause asks only for the refusal.
No security finding.
7. Time: environment prep vs testing
- Environment prep: install 25 s and full build 16m03s (03:35Z–03:51Z), then about 8 min of boots and console builds for the Playwright pins, about 25 min in all.
- Testing: vitest pins 03:51Z–04:17Z (25 min, sequential), Playwright specs and their reruns about 25 min, probes about 15 min, clause scoring 04:43Z–04:55Z (five scorers in parallel).
- Ratio about 1 to 3. Wall clock about 80 min to verdicts.
8. Per-clause verdicts
One row per clause (A = acceptance, N = negative), with the layer and one line of text evidence: 688 rows. partial means the pin passed below the clause's oracle layer or covered half of it; skipped means a live or browser leg outside this pins-only card, or a SCOPE pointer. The tables are in the comments below, one per area group. Checklist-accuracy findings and coverage gaps go to the anchor #27377.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (1/6): dashboards, i18n, identity-auth, search.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (2/6): integration-system.
providerConfigwithout a provider', 'rejects authoredactionson a provider-bound instance', 'rejects inlineauthenticationsecrets on a provider-bound instance (§3)' — regex fragments at schema parse; no build is runstatusfield is asserted by no pinauthenticationsecrets on a catalog descriptor' and '… on a provider-bound instance (§3)' at schema parse; the oauth2 discriminator refusal of ConnectorInstanceAuthSchema is fed to no case and no build is runauthenticationrefusal is pinned at schema parse (connector-provider.test.ts); an oauth2-authored entry building clean is checked by no pinGenerated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (3/6): platform-core.
everyone/guestis refused 400 and nothing is written' on the booted showcase; distinct metadata_type over the full table after every stock switch is the live legpnpm console:build' — the console-not-built plugin on a real HonoHttpServer via app.request, not a served os serve boot; the served GET /_console/ is the live legGenerated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (4/6): records-forms.
label (name)and disables Next' and 'clears the hint and enables Next once the required column is supplied'unique: trueon an object WITH a tenant column scopes per organization' + sql-driver-8577 'AFTER: the same cross-organization create is accepted — 409 flips to 201'; live two-org probe not provisioned (knownGaps[2]).Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (5/6): records-forms.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Per-clause verdicts (6/6): studio-authoring.
titel→title'; saveMetaItem over a stub engine, not the HTTP body.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:devx#1 · os-warren · session_01JQwxbYXnfyuxgv3GQP9G1h
Close-out for this record (SKILL §5).
Extracted: #28970 · studio-authoring.record-page-roundtrip · observed beside the clauses
Parked-on: #27377 · 79 PARTIAL items: pins-only coverage (186 skipped live legs, 315 partial rows), 15 retests owed from landed wave-3 cards, and 44 checklist-accuracy findings (anchor comment 6569512017)
There is no clause FAIL, so no four-way disposition is owed. The four wave-3 FAILs were not re-judged here (their clauses are live legs,
skippedin this record). They stay on #27438, which this record does not supersede.No security finding.
Generated by Claude Code