Skip to content

QA run · release-18.2.0-w2-tier1-b (80/80) · 756220c4 · 2026-10-27 · 15 PASS / 64 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #26450

Closed

Description

@objectstack-fleet

QA run record — objectstack 18.2.0, wave 2, card W2-C2b: Tier 1 half B (checklist-test §5 retest trigger 1, release candidate ⇒ full Tier 1). Wave anchor: #25807. Supersedes, for its own areas only, the wave-1 Tier 1 record #25815 (shared with card W2-C2a, which owns the other Tier 1 areas). Maintainer ordered the wave directly; this is a test run and lane/seat dispatch does not apply.

Environment fingerprint

  • Framework 756220c4a7adcbb1228864607cb4b6a1ca486dc0 (detached). The console builds from ui/ in this same tree; there is no .objectui-sha pin any more.
  • Cold container: pnpm install --frozen-lockfile 25 s (01:30:01–01:30:26Z); pnpm build --concurrency=2 119/119 tasks, exit 0, 01:30:26–01:42:39Z; pnpm console:build --concurrency=2 exit 0 at 01:42:39Z (cache hit + copy). Console build line: packages/console/dist built 01:42Z from 756220c, served at /_console/ (200). node scripts/check-dev-prereqs.mjs green (108 package build artifacts present).
  • Chromium: playwright-core wants build 1243; /opt/pw-browsers holds chromium-1243 / chromium_headless_shell-1243 — they agree, stock configs launch as-is.
  • vitest: one package per invocation, --maxWorkers=1, JSON reporter; ui suites from ui/ root (the objectui vitest guard refuses package-dir launches); the one cli *.e2e.test.* pin in its own invocation with OS_TEST_TIERS=nightly, every other cli pin without it.
  • Boots (each its own non-default port and its own file DB under the run scratch dir, --seed-admin, OS_PORT exported beside -p, started with setsid, stopped by process group, port confirmed free): pins stack showcase :41720 + console Vite dev server :5191 (DEV_PROXY_TARGET) for ui/e2e/live, the same :41720 serving /_console for examples/app-showcase Playwright; live-leg runners L1 :41711, L2 :41712, L3 :41713, L4 :41714, L5 :41715; fail verification :41730. Seed: stock showcase + seeded admin; personas minted per RUNNER (invite-then-sign-up / admin create-user). Every fixture a runner staged is named in its clause evidence.
  • Parallelism: 5 read-only clause-mapping subagents (by area group) re-derived every clause from the item text and pin source at this tree (QA run · release-18.2.0-tier1 (131/156) · 6679644a · 2026-10-25 · 6 PASS / 123 PARTIAL / 0 FAIL / 2 BLOCKED / 25 NOT-RUN #25815 read only for comparison); 5 live-leg runner subagents, each with its own port/DB/browser context, at most 3 browsers at once; the parent ran every pin, sequentially, after the build had finished.
  • Timestamps (UTC, 2026-10-27): env prep 01:30–01:43; clause mapping 01:31–01:47; framework vitest pins 01:43–01:58; ui unit pins 01:58–02:00; extra pins 02:00–02:02; ui/e2e/live 02:03–02:09; showcase Playwright 02:09–02:11; live legs 01:44–02:38 (incl. probes); fail verification 02:40–02:44.

Scope

Selector release-18.2.0-w2-tier1-b: every active, unblocked item carrying automated.ref (read from areas/AREA.json at 756220c) in the areas dashboards · i18n · identity-auth · integration-system · platform-core · records-forms · search · studio-authoring · ux-conventions. 80 items, 657 clauses (dashboards 3, i18n 2, identity-auth 9, integration-system 11, platform-core 13, records-forms 30, search 3, studio-authoring 9, ux-conventions 0 — none of its 3 runnable items carries a ref). Each row of the item table carries the revision its verdict is valid for (all equal the resolver's revision). Blocked items are excluded by the resolver (records-forms.record-edit-undo, carried forward below). No planned item carries a ref; records-forms.picklist-shared-across-objects is planned and out of this selector.

The 15 wave-1 NOT-RUN items in these areas got a live leg this time (L1–L5): i18n.surface-matrix, integration-system.connector-descriptor-audit, platform-core.url-overlay-contract, records-forms.bulk-select-all-matching, records-forms.concurrent-edit-conflict, records-forms.conditional-rules-grid, records-forms.delete-behavior-matrix, records-forms.field-type-constraints, records-forms.gantt-interactions, records-forms.import-job-undo-cancel, records-forms.list-view-capabilities, records-forms.record-clone-contract, records-forms.record-discussion-mentions, studio-authoring.org-override-registry-gate, studio-authoring.permission-matrix-editor-ux.

Pin run

pins files tests
framework vitest, every file the 80 refs name (31 package invocations) 184 4,496 passed · 0 failed · 0 skipped
ui vitest (jsdom), files the refs name 26 361 passed · 0 failed
extra pins the mapping found asserting a clause but missing from (or unresolvable in) a ref 22 577 passed · 0 failed
ui/e2e/live Playwright (console dev server over the :41720 showcase) 15 specs 25 passed · 0 failed
examples/app-showcase showcase-smoke.spec.ts (served /_console) 1 spec 49 passed (49/49)

Every ref-named vitest file (210) collected at least one passing test. Not run: ui/e2e/import-console/import-console-undo.spec.ts (self-skips unless IMPORT_CONSOLE_LIVE=1, targets app-crm) and ui/e2e/import-harness/import-undo.spec.ts (needs the :5200 harness over app-crm) — no clause rests on them: records-forms.import-job-undo-cancel was driven live on the showcase instead (L3, CSV built from showcase_task's required fields).

How a clause scores (RUNNER rule 6)

A pin scores a clause pass only when a named case asserts it at the oracle's layer (unit · in-process · http-in-process · live-boot · browser · component). A pin that asserts the expectation but stops above the oracle's layer scores the clause partial, naming the missing layer (the card's instruction and RUNNER's literal wording; #25815 recorded these as not-run, so its counts are not directly comparable). A clause no pin asserts is not-run. A live-leg verdict overrides the pin verdict for its clause; a live blocked sub-leg under a passed clause makes it partial. Clause evidence (pin file + layer, or the live oracle line) is in the detail comments below, one line per clause.

Result

Items: 15 PASS / 64 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN of 80. Clauses: 273 pass · 226 partial · 1 fail · 157 not-run, of 657. No pin went red.

item rev pins (files run/named, tests or specs passed) pass partial fail live verdict
dashboards.analytics-exposure-gate-and-measure-aggregate 2 4/4, 66 a0 a1–a2 - PARTIAL
dashboards.dataset-report-authoring 4 1/1, 3 a0 - - PARTIAL
dashboards.empty-null-bucket-boundaries 2 2/2, 12 a3–a4 n0 - PARTIAL
i18n.flow-copy-translation-and-host-override 3 8/8, 256 a0 a1–a4 - PARTIAL
i18n.surface-matrix 10 3/3, 81 a0–a10, n0, n2–n3 - n1 live FAIL
identity-auth.admin-lifecycle-operations 10 7/7, 352 a1–a3, a8, a10–a11, n0 a0, a4–a6, a9, a12, n3 - PARTIAL
identity-auth.api-key-expiry-lifecycle 2 3/3, 21 a0–a1 a2–a3 - PARTIAL
identity-auth.auth-gate-held-session-raw-host-families 3 11/11, 229 a0 a1–a3, n0 - PARTIAL
identity-auth.auth-method-matrix 9 4/4, 24 a7 a3, a6, a9, n1 - PARTIAL
identity-auth.cookie-session-renewal-in-process 2 2/2, 14 a0, a2 a1 - PARTIAL
identity-auth.default-organization-boot-invariant 3 2/2, 61 a0 a1–a3, n0 - PARTIAL
identity-auth.implicit-account-linking-ownership 4 1/1, 23 a4, n4 a0–a3, n0–n3 - PARTIAL
identity-auth.import-invitation-and-sso-domain-answers 2 4/4, 61 a0–a2 a3 - PARTIAL
identity-auth.invitation-scope-gates 6 1/1, 6 a1–a3, n0 a0, n1 - PARTIAL
integration-system.connector-auth-kind-application 4 3/3, 75 - a0–a3, n1–n2 - PARTIAL
integration-system.connector-declarative-boot 5 3/3, 67 n0 a0–a5, n1 - PARTIAL
integration-system.connector-descriptor-audit 3 1/1, 9 a0–a2, n0–n1 - - live PASS
integration-system.connector-stdio-default-deny 3 3/3, 71 a3 a0–a2, n0–n1 - PARTIAL
integration-system.datasource-admin-lifecycle 7 11/11, 220 a6–a7, n4–n5 a0–a5, a8, n0–n3 - PARTIAL
integration-system.email-template-render 8 6/6, 266 n0 a0–a5, a7 - PARTIAL
integration-system.external-schema-browser-ui 6 2/2, 27 a6 a2–a5, n2 - PARTIAL
integration-system.external-schema-drift-gate 5 4/4, 52 a4–a6, n2, n4 a0–a3, n0–n1, n3, n5 - PARTIAL
integration-system.external-schema-introspection 6 6/6, 134 a1, n0, n3 a0, a2–a4, n1–n2 - PARTIAL
integration-system.inbound-mailbox-association 3 7/7, 99 a0, a3 a1–a2 - PARTIAL
integration-system.notification-org-and-redeliver-eligibility 3 4/4, 108 a0 a1–a3 - PARTIAL
platform-core.activation-ledger-registration-home 7 4/4, 47 a0–a4, n0–n1, n3 - - PARTIAL
platform-core.activation-ledger-row-contract 8 5/5, 148 n2 a1–a5, n1, n5 - PARTIAL
platform-core.interrupted-migration-boot-report 3 1/1, 11 a3–a4, n1 a0–a2, n0 - PARTIAL
platform-core.lifecycle-retention-sweep 7 1/1, 114 a3 a0–a2, a4, n0–n1 - PARTIAL
platform-core.metadata-authoring-roundtrip 6 2/2, 6 a2 a3, n0 - PARTIAL
platform-core.metadata-registry-serving 3 1/1, 6 a1–a2 a0, n0 - PARTIAL
platform-core.nav-surfaces-render 7 1/1, 49 a0, n0–n1, n3 - - PARTIAL
platform-core.protocol-18-handshake-and-stored-replay 2 5/5, 98 a0 a1–a3 - PARTIAL
platform-core.serve-composition-v18 3 6/6, 41 a0–a5 - - PASS
platform-core.settings-audit-secret-fingerprint 4 1/1, 7 a5, n2–n3 a0–a4, n0–n1 - PARTIAL
platform-core.settings-organization-isolation-and-platform-rung 5 4/4, 91 a0 a1–a3 - PARTIAL
platform-core.url-overlay-contract 3 2/2, 17 a0–a5, n0–n3 - - live PASS
platform-core.v18-boot-refusals 7 3/3, 35 a0 a1–a3, n0 - PARTIAL
records-forms.action-param-widgets 4 1/1, 5 n1 a2–a3 - PARTIAL
records-forms.adhoc-filter-sort-builder 7 1/1, 5 - a4 - PARTIAL
records-forms.bulk-select-all-matching 5 4/4, 37 a0–a4, n0–n2 - - live PASS
records-forms.cascading-multilevel-and-clear 8 1/1, 2 a1, n0–n1 a0 - PARTIAL
records-forms.cascading-options 6 1/1, 2 a1, n0 a0 - PARTIAL
records-forms.comment-reactions-and-edit-stamps 3 5/5, 43 a0 a1–a3 - PARTIAL
records-forms.concurrent-edit-conflict 5 1/1, 8 a0–a5, n0–n2 - - live PASS
records-forms.conditional-rules-grid 9 2/2, 2 a0–a4, n0–n1 - - live PASS
records-forms.conditional-rules-header 5 2/2, 2 a0, a3 - - PARTIAL
records-forms.delete-behavior-matrix 4 4/4, 342 a0–a5, n0–n3 - - live PASS
records-forms.encrypted-field-behavior 5 2/2, 87 a0–a1, n0 a2–a4, n1–n3 - PARTIAL
records-forms.field-history-tracking 7 3/3, 33 a4 a0, a2, n2 - PARTIAL
records-forms.field-type-constraints 4 3/3, 92 a0–a7, n0–n4 - - live PASS
records-forms.field-type-matrix 6 1/1, 46 a0, a3–a4, n2 a5 - PARTIAL
records-forms.field-unique-enforcement 10 3/3, 92 a5, n3 a0–a4, n0–n2 - PARTIAL
records-forms.form-dirty-guard 4 1/1, 14 a2 a0, n0 - PARTIAL
records-forms.gantt-interactions 6 4/4, 38 a0–a3, n0 - - live PASS
records-forms.import-job-undo-cancel 7 0/2, 0 a0–a3, n0–n2 - - live PASS
records-forms.import-wizard-encoding-and-hints 7 3/3, 62 a0–a2 - - PARTIAL
records-forms.list-view-capabilities 7 3/3, 7 a0–a9, n0–n2 - - live PASS
records-forms.master-detail-atomic-save 8 2/2, 3 a4 a0, a5 - PARTIAL
records-forms.object-hook-lifecycle 10 6/6, 91 - a0, a2–a3, a5, a7–a8, n0–n4 - PARTIAL
records-forms.predicate-relationship-traversal 4 1/1, 48 a3 a0–a2, n0–n2 - PARTIAL
records-forms.record-clone-contract 3 3/3, 32 a0–a4, n0–n3 - - live PASS
records-forms.record-discussion-mentions 7 4/4, 93 a0–a8, n0–n6 a9 - live PARTIAL
records-forms.related-list-server-pagination 8 1/1, 1 a2 - - PARTIAL
records-forms.v18-semantic-defaults 3 3/3, 495 a0 a1–a3 - PARTIAL
records-forms.view-type-gallery 2 1/1, 49 - a5 - PARTIAL
records-forms.write-answer-advisories-rollback-and-tree-delete 2 5/5, 97 a0, a3 a1–a2, n0 - PARTIAL
records-forms.write-time-option-and-element-shape-judgement 1 7/7, 155 a0 a1–a4 - PARTIAL
search.cross-field-object-search 4 1/1, 5 a0–a4, n0–n2 - - PASS
search.field-scoped-narrowing 2 2/2, 58 a0 a1, n0–n1 - PARTIAL
search.global-search-skips-unreadable 4 2/2, 16 a1–a2, n0–n2 a0, a4, n4 - PARTIAL
studio-authoring.expression-editors 5 4/4, 80 a7 a0, a2–a5, n1–n2 - PARTIAL
studio-authoring.meta-save-preconditions-and-draft-rows 2 6/6, 78 a0 a1–a3 - PARTIAL
studio-authoring.metadata-diagnostics-sweep 9 2/2, 42 a7, n1 a3, n0 - PARTIAL
studio-authoring.multi-package-item-rows 2 10/10, 133 a0 a1–a4 - PARTIAL
studio-authoring.object-designer-roundtrip 8 1/1, 4 a2 a1, a3, n0 - PARTIAL
studio-authoring.org-override-registry-gate 5 4/4, 47 a0–a4, n0 - - live PASS
studio-authoring.permission-matrix-editor-ux 5 3/3, 30 a0–a5, n0–n1 - - live PASS
studio-authoring.record-page-roundtrip 9 2/2, 3 a0–a1, n0 - - PARTIAL
studio-authoring.save-door-runs-authoring-rules 3 8/8, 339 a0 a1–a3, n0 - PARTIAL

Fail — reproduction rule

i18n.surface-matrix n1 (rev 10, P1) — "a surface whose group the spec declares … showing NO translation while the bundle carries one for it is a FAIL against the resolver". Found by L4, re-derived independently by the parent on a fresh boot (:41730), reproduced twice per browser locale.

  1. Boot the stock showcase; sign in as admin@objectos.ai through the console form, in a browser context whose locale is en-US.
  2. Set the user's language to zh-CN: avatar menu → Language → 中文(中国), or PATCH /api/v1/data/sys_user/USER_ID {"locale":"zh-CN"} → 200.
  3. Confirm the bundle: GET /api/v1/i18n/translations/zh-CN carries objects.showcase_task.fields.status.options = {backlog: 待规划, todo: 待办, in_progress: 进行中, in_review: 评审中, done: 已完成} and priority options.
  4. Open /_console/forms/showcase_task.form?recordId=ANY_TASK_ID&recordObject=showcase_task; wait for the form to render.
  5. Read select option texts and the [role=combobox] values.

Expected: options 待规划/待办/进行中/评审中/已完成 and 低/中/高/紧急 (as field labels and sections are, on the same page). Actual: labels 标题*, 状态*, 优先级 are zh, but the selects read Backlog|To Do|In Progress|In Review|Done and Low|Medium|High|Urgent, combobox In Review / High. Control 1: the in-app overlay form /_console/apps/com.example.showcase/showcase_task?form=ID in the same session renders 进行中|评审中|已完成 / 低|中|高|紧急. Control 2: the same /forms URL in a zh-CN browser context renders zh options — the options are only translated when the server localizes the schema by Accept-Language, never from the user's chosen language. Source: ui/apps/console/src/components/FormPage.tsx ~L848 options: normalizeOptions(def.options) (no option-label translation; labels/placeholder go through the localizer). Traps ruled out: stale-console-bundle (dist built 01:42Z from this tree; source agrees), hydration-race (screenshot first, waited for the section heading), automation-input (read-only DOM reads). Not auth.

Item verdicts (derived) and gaps

  • PASS (15): integration-system.connector-descriptor-audit, platform-core.serve-composition-v18, platform-core.url-overlay-contract, records-forms.bulk-select-all-matching, records-forms.concurrent-edit-conflict, records-forms.conditional-rules-grid, records-forms.delete-behavior-matrix, records-forms.field-type-constraints, records-forms.gantt-interactions, records-forms.import-job-undo-cancel, records-forms.list-view-capabilities, records-forms.record-clone-contract, search.cross-field-object-search, studio-authoring.org-override-registry-gate, studio-authoring.permission-matrix-editor-ux.
  • FAIL (1): i18n.surface-matrix (n1, above).
  • PARTIAL (64): every clause either passed or is partial/not-run with its reason in the detail comments. records-forms.record-discussion-mentions a9's cross-organization leg is blocked(fixture) — walled boot (RUNNER "A stock single boot holds exactly one organization") — so a9 is partial.
  • Partial coverage (226 layer-limited clauses, 157 with no pin) is the handover to the next sweep; parked on [sweep] v18.2.0 release test sweep #25807 per item in the close-out comment.
  • Fixture gaps: app-crm boot + IMPORT_CONSOLE_LIVE=1 (and the :5200 import harness) for records-forms.import-job-undo-cancel's two specs; a walled boot for records-forms.record-discussion-mentions a9's cross-org leg; the wall and type gates of studio-authoring.permission-matrix-editor-ux a5 are not reachable on stock (the item's own verify text scores only the package and artifact gates there, which passed).
  • Staged fixtures (all named in clause evidence, reverted where possible): scratch objects/permission set/view overlays via the meta API (L1, L2, L5), 55 + 5010 scratch tasks for the select-all cap (L2, deleted after), an export grant (L2), a gantt view overlay with dependenciesField/lockField (L5), a scratch feeds-disabled object feeds_qa_nofeeds (L3: the item's qa_nofeeds recipe now answers 422 NAMESPACE_PREFIX).

Checklist-accuracy findings (≈160 one-liners from the mapping plus the live runners' notes: refs missing pins that exist, refs naming files that assert nothing, stale clause text such as field-type-constraints a2's currency scale gap, permission-matrix-editor-ux's min-w-[960px] now 1248px, i18n.surface-matrix a7's twelve-group face now fifteen, a10's feed premise after #26167) go to the wave anchor #25807, not to defect cards.

Off-clause probes (rule 8)

~25 min in total, 5 min per live runner, on the same boots and personas (admin, auditor.demo, phone.demo, admin-minted members, a contributor-bound member, anonymous). Doors and boundary classes: /data field-zoo boundaries (0/1000, empty string, [], '' lookup/select, 1e400), clone (string overrides, empty body, client id, empty id path), DELETE unknown/already-deleted id; OCC If-Match absent/garbage/*/weak W/; discussion empty body, unknown thread/mention id, member create/read; import double undo, unknown job, cancel on terminal job, member routes; /meta/permission as non-admins, unknown/bare/empty field keys, packaged set; /apps/showcase/recalc empty/unknown ids; export as unentitled personas; i18n routes anonymous and with zh/zh-cn/blank locale; console cold-loads of ?palette, ?shortcuts, unknown ?recordId/?form, bogus ?tab.

Passed the filing gate and extracted at close-out: (1) an authorization-class observation on record-discussion mention notifications, single-organization boot — detail withheld pending maintainer (RUNNER rule 2 carve-out); (2) the /forms route also hard-codes its refusal and missing-recordId messages in English (folded into the n1 card). Observed, not filed (not reproduced twice, or minor/by design): If-Match: * answers 409 rather than matching any current version; an unknown mention id is accepted silently; for ~30 s after an import cancel the job reports 0 written and undo answers 422 NOT_UNDOABLE, then self-corrects (seen on two jobs); a stock org_member can neither read nor create sys_comment (likely posture); the select-all banner keeps saying "All 5010 matching records are selected" while the fan-out stops at 5000; ?form=UNKNOWN_ID opens a blank edit form; the invoice detail drawer lists line position 1 above 0; recalc with empty _selectedIds fails inside the flow instead of a clean 400; auto-schedule says "All dependencies satisfied" while a locked task still violates its link; a task PATCH with end before start is accepted (no rule declared).

Timings

Env prep ~13 min (install + framework build + console build) against ~70 min of testing (clause mapping in parallel with the build tail; pins 01:43–02:11; live legs 01:44–02:38; verification 02:40–02:44).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Per-clause detail, part 1/3 — areas: records-forms. One line per clause: aK = acceptance[K], nK = negative[K]; verdict; evidence. pin FILE [layer] = the passing pin(s) that assert it (all named pins passed on 756220c); partial: names the layer or half the pin does not reach; LIVE Ln: = the live-leg oracle line from that runner's boot, which decides the clause.

    records-forms

    records-forms.action-param-widgets (rev 4) — PARTIAL

    • a0 · not-run · no pin (dom widget table; no browser pin)
    • a1 · not-run · no pin (dom attributes; no browser pin)
    • a2 · partial · pin action-params-contract.dogfood.test.ts [http-in-process] — partial: 400 on the malformed bag and ‹300 on the conformant one; the body's received-keys echo is not asserted
    • a3 · partial · pin action-params-contract.dogfood.test.ts [http-in-process] — partial: server refusal names p_text (in a bag that also has a bad option and unknown key); the dialog-blocks-confirm half is unpinned
    • n0 · not-run · no pin (procedural scoring caution (maxSize owned by records-forms.upload-guard-blocks-confirm))
    • n1 · pass · pin action-params-contract.dogfood.test.ts [http-in-process]

    records-forms.adhoc-filter-sort-builder (rev 7) — PARTIAL

    • a0 · not-run · no pin (toolbar+view filter merge not pinned)
    • a1 · not-run · no pin (SortBuilder sort param/server order not pinned)
    • a2 · not-run · no pin (restore across in-app nav not pinned)
    • a3 · not-run · no pin (user-scoped preference/cache key not pinned)
    • a4 · partial · pin user-filters.spec.ts [browser] — partial: uf_priority and uf__tab survive page.reload() with count bar "2 "; the reproduced data request and row identity on a fresh load are unasserted
    • n0 · not-run · no pin (merge-vs-replace not pinned)
    • n1 · not-run · no pin (tabs userFilters suppression on object list not pinned (pins cover interface pages))
    • n2 · not-run · no pin (cross-account cache leak not pinned)
    • n3 · not-run · no pin (valueless FilterBuilder row drop not pinned)

    records-forms.bulk-select-all-matching (rev 5) — PASS

    • a0 · pass · LIVE L2: pass — staged 55 'QA bulk NN' tasks (createMany). On bulk_actions, quick-search 'QA bulk' → GET …?top=50&search=QA+bulk → total 55, 50 rows rendered, count bar '55 records'. Select all rows → banner 'All 50 on this page are selected. Select all 55 matching' (55 = response total). No banner with 1 row sele… pin BulkActionBar.test.tsx [component] — partial: banner offer/visibility asserted in jsdom with tota
    • a1 · pass · LIVE L2: pass — after Select all 55 matching: 'All 55 matching records are selected' / '55 selected (all matches)'. Dispatch triggers GET …?top=500&skip=0&search=QA+bulk (page params dropped, 500-row paging) → 55 ids. The dispatched _selectedIds are 55 unique ids, equal as a set to a direct GET /api/v1/data/showca… pin bulkFanoutHostParams.test.tsx [component] — partial: fan-out collects every matching id over a mo
    • a2 · pass · LIVE L2: pass — aggregate Recalculate Selection: exactly 1 POST /api/v1/apps/showcase/recalc whose body is {_selectedIds:[55 ids]} (top level) → 200; the dialog went from '0 / 55 processed' to 'Succeeded 55 / 55'. Per-record Mark Done over all 55 matching: 55× POST /api/v1/actions/showcase_task/showcase_mark_done,… pin objectBulkActionDispatch.test.tsx [component] — partial: one aggregate request with _selectedIds
    • a3 · pass · LIVE L2: pass — post-clear screenshot (2 fresh runs): after select-all-matching (50 row boxes checked, header checked), Clear → 0 rows checked, header unchecked, no 'selected'/'matching' toolbar, no Clear button. Also with a 2-row page-local selection, Clear → 0 checked and the toolbar is gone pin bulkActionRefresh.test.tsx [component] — partial: both selection sources reset asserted in jsdom; dom oracle wants the
    • a4 · pass · LIVE L2: pass — staged 5010 'QA cap NNNN' tasks. Search total 5010, banner 'Select all 5010 matching' → '5010 selected (all matches)'. Recalculate Selection → 10 fan-out GETs top=500&skip=0…4500, 5000 distinct ids collected, never 5001+. The confirm dialog reads 'This will apply to 5000 records' (cancelled, no POS… pin bulkFanoutHostParams.test.tsx [component] — partial: HARD_CAP 5000 stops the fan-out over a mocke
    • n0 · pass · LIVE L2: pass — the dispatched set is 55 (server match set), not the 50 rendered rows pin bulkFanoutHostParams.test.tsx [component] — partial: same component-level fan-out evidence as a1; no live server match set
    • n1 · pass · LIVE L2: pass — banner 55 = find total 55 = direct API count 55 pin BulkActionBar.test.tsx [component] — partial: banner renders the totalMatching prop it is handed; agreement with a live filtered API count is never checked
    • n2 · pass · LIVE L2: pass — after Clear, the toolbar and the row checkboxes are both empty (a3) pin bulkActionRefresh.test.tsx [component] — partial: jsdom asserts lockstep reset; rendered-page oracle not reached

    records-forms.cascading-multilevel-and-clear (rev 8) — PARTIAL

    • a0 · partial · pin cascading-options.spec.ts [browser] — partial: re-filter + stale clear asserted in the browser; the spec never submits, so "not carried into the submit" is unpinned
    • a1 · pass · pin cascading-options.spec.ts [live-boot]
    • a2 · not-run · no pin (no pin drives create → parent-only PATCH → GET; validator-unit evidence only)
    • a3 · not-run · no pin (no pin drives the invoice contact lookup picker)
    • a4 · not-run · no pin (no pin POSTs a cross-account or fabricated contact)
    • a5 · not-run · no pin (spec asserts the {cn,zj} create 201 but never re-reads it; lookup twin not driven)
    • n0 · pass · pin cascading-options.spec.ts [live-boot]
    • n1 · pass · pin cascading-options.spec.ts [live-boot]
    • n2 · not-run · no pin (procedural false-pass guard over the two recorded gaps)

    records-forms.cascading-options (rev 6) — PARTIAL

    • a0 · partial · pin cascading-options.spec.ts [browser] — partial: re-filter (cn→gd,zj; us→ca,tx) and clear pinned; the pre-driver gating half is not read
    • a1 · pass · pin cascading-options.spec.ts [live-boot]
    • a2 · not-run · no pin (role gate not pinned on either side)
    • a3 · not-run · no pin (lookup picker scoping not pinned)
    • a4 · not-run · no pin (in-set POST asserted 201 but never re-read (and is deleted))
    • n0 · pass · pin cascading-options.spec.ts [live-boot]
    • n1 · not-run · no pin (non-admin restricted-tier POST not pinned)

    records-forms.comment-reactions-and-edit-stamps (rev 3) — PARTIAL

    • a0 · pass · pin activity-field-redaction.test.ts [unit]; comment-edit-stamp.integration.test.ts [in-process]; comment-reaction-own-record-floor.test.ts [in-process]; sys-comment-reaction.object.test.ts [unit]; sys-comment-reactions-door.integration.test.ts [in-process]
    • a1 · partial · pin comment-reaction-own-record-floor.test.ts [in-process]; sys-comment-reaction.object.test.ts [unit] — partial: foreign-delete refusal on a real kernel and declaration-level no-update/unique; 201 + user_id forcing, 409 duplicate and 403 RECORD_NOT_ACCESSIBLE statuses nev…
    • a2 · partial · pin sys-comment-reactions-door.integration.test.ts [in-process] — partial: in-process kernel + mapDataError asserts 400 INVALID_FIELD for write; filter refusal and read-key absence over the API not driven
    • a3 · partial · pin comment-edit-stamp.integration.test.ts [in-process] — partial: edit stamp + forged-value drop asserted on a real kernel/SQLite in-process; no API read-back

    records-forms.concurrent-edit-conflict (rev 5) — PASS

    • a0 · pass · LIVE L3: pass — Two form-signed-in admin contexts A/B on showcase_account 1Osk4LiwrlMmjar5 record page, both opened Edit modal; A PATCH If-Match 01:45:03.452Z {billing_email} → 200 (updated_at → 01:46:44.019Z); B PATCH same If-Match {billing_email} → 409 code CONCURRENT_UPDATE currentVersion 01:46:44.019Z + curren…
    • a1 · pass · LIVE L3: pass — Screenshot: modal form shows 'Save conflict' alertdialog ('changed by someone else… Their save: 10/27/2026 1:46:44 AM') with Keep editing / Overwrite; inline stale save shows ConcurrentUpdateDialog 'This record was modified by someone else' with YOUR EDIT / CURRENT VALUE (racer's value + Updated at… pin occSave.test.tsx [component] — partial: modal-form conflict dialog with Keep editing / Overwrite
    • a2 · pass · LIVE L3: pass — Inline: dblclick Billing Email, type binline-r1, racer API PATCH lands (200, updated_at 01:48:12.657Z), Save → PATCH If-Match 01:46:44.019Z → 409; dialog 'Reload latest' → page shows a-r1@vandelay.example (A's), B's value absent; network capture shows ZERO PATCH/POST after the Reload click; GET re-…
    • a3 · pass · LIVE L3: pass — Inline stale save r2 → 409 currentVersion 01:48:37.877Z → 'Overwrite anyway' → retry PATCH If-Match: 2026-10-27T01:48:37.877Z (exactly the 409's currentVersion), body {billing_email:binline-r2…} → 200; GET re-read billing_email=binline-r2@vandelay.example @ 01:48:40.879Z (single winner, B). pin occSave.test.tsx [component] — partial: retry re-keyed ifMatch asserted over a mocked source; no server 20
    • a4 · pass · LIVE L3: pass — Screenshot: dblclick body field Website opens the shared inline session (header highlights + details all editable) with ONE Save bar (1 Save button); edited Website (body) + Annual Revenue (header highlight) → exactly ONE PATCH /api/v1/data/showcase_account/1Osk4LiwrlMmjar5 body {"website":"https:/…
    • a5 · pass · LIVE L3: pass — Same two-surface inline edit with racer API PATCH (billing_email, 200 → 01:49:51.191Z) between edit and Save: single PATCH {website,annual_revenue} If-Match 01:49:11.184Z → 409 CONCURRENT_UPDATE; ConcurrentUpdateDialog appears ('newer version of this record', YOUR EDIT/CURRENT VALUE JSON for both k…
    • n0 · pass · LIVE L3: pass — No silent last-write-wins on any of 4 stale saves (1 modal, 3 inline): every one 409 + dialog.
    • n1 · pass · LIVE L3: pass — Two-surface inline save issued exactly one PATCH with exactly the 2 edited keys (no computed/readonly/untouched keys); modal and inline single-field saves likewise carried only the edited key.
    • n2 · pass · LIVE L3: pass — Every console save captured (modal A, modal B, 3 inline, overwrite retry) carried an If-Match header. pin occSave.test.tsx [component] — partial: form edit sends ifMatch over a mocked source; inline path and the real If-Match header unobserved

    records-forms.conditional-rules-grid (rev 9) — PASS

    • a0 · pass · LIVE L2: pass — INV-1002 (draft, staged 2nd line position 1, amount 150) → Edit. Row 1: Qty 120, Description emptied → Description input aria-invalid=true with a red cell (screenshot); row 2 (qty 1) has no flag. Update → banner + toast 'Description is required'. The one batch POST /api/v1/batch atomic → 400 VALIDA… pin grid-conditional-rules.spec.ts [browser] — partial: inline required flag on line 0 at Qty 100 (ab
    • a1 · pass · LIVE L2: pass — direct POST /api/v1/batch atomic [invoice update tax_rate 5, line update qty 120 description ''] → 400 VALIDATION_FAILED naming description. Also [valid create + create qty 120 with no description] → 400. Line reads unchanged (2 lines) and tax_rate still 0: no partial rows
    • a2 · pass · LIVE L2: pass — in the open Edit form (no reload), status Draft→Paid: Product lookup-trigger, Qty and Unit Price disabled on both rows, Description stays enabled (screenshot). Paid→Draft re-enables all three; Sent stays enabled; a second Paid→Draft cycle repeats this pin grid-parent-rules.spec.ts [browser] — partial: Qty and Unit Price disabled at paid / enabled at draft; Product cell unasserted
    • a3 · pass · LIVE L2: pass — upload receipt-qa.txt into row 2's receipt cell → POST storage/upload/presigned → PUT raw → POST upload/complete {fileId 8c35c15c…}. Update → batch line update {receipt:'8c35c15c-…'} (the id, not a blob). GET line → receipt {id, name, size 35, mimeType, url}. sys_file row committed. GET /api/v1/sto…
    • a4 · pass · LIVE L2: pass — lines carry distinct positions 0 and 1. After filling the description and saving, the batch updates only line y9hL… {description, quantity:120, amount:11880} → 200. Diff of all lines: the edited line changed description/quantity/amount (+updated_*), the sibling mtGj… (pos 1) is BYTE-IDENTICAL. Invo…
    • n0 · pass · LIVE L2: pass — save with qty 120 + empty description refused on both client and server (a0, a1)
    • n1 · pass · LIVE L2: pass — locks track the header status live in both directions (a2) pin grid-parent-rules.spec.ts [browser] — partial: two of three cells pinned (Product unasserted)

    records-forms.conditional-rules-header (rev 5) — PARTIAL

    • a0 · pass · pin field-conditional-rules.spec.ts [browser]; required-when-submit.spec.ts [browser]
    • a1 · not-run · no pin (api oracle; neither browser pin issues a direct POST)
    • a2 · not-run · no pin (pin asserts the OPPOSITE on the New dialog (tax_rate enabled at paid); no edit-form lock or PATCH re-read)
    • a3 · pass · pin field-conditional-rules.spec.ts [browser]
    • a4 · not-run · no pin (no pin reads the invoice row-action menus (ref concedes))
    • a5 · not-run · no pin (cross-check needs the unpinned a1/a2 server legs)
    • n0 · not-run · no pin (direct POST not pinned)
    • n1 · not-run · no pin (PATCH + re-read not pinned)
    • n2 · not-run · no pin (invoice row-action menu not pinned)

    records-forms.delete-behavior-matrix (rev 4) — PASS

    • a0 · pass · LIVE L1: pass — run-created account 2k6UaXmt5T2yUuK2 + contact iySwmH17cAOuMilF(account=it); DELETE /data/showcase_account/2k6U… → 200 {success:true}; GET contact → 200 account:null, row survives pin engine-cascade-delete-multivalue-probe.test.ts [in-process]; engine-cascade-delete.test.ts [in-process] — partial: set_null clear asserted on a real engine over a stub driver; the DELETE door + child re-read are not dr
    • a1 · pass · LIVE L1: pass — zoo row wRnwrmkZAbxeJ772 f_lookups=[n7MF…,p_4q…]; DELETE account n7MF… → 200; re-read f_lookups=["p_4qatu_gFpA0iRo"] (member removed, remainder written); deleting the last member then → [] pin engine-cascade-delete-multivalue-probe.test.ts [in-process] — partial: member removal asserted at the engine only
    • a2 · pass · LIVE L1: pass — invoice ZgitMd42… + 2 lines (total 25); DELETE invoice → 200; lines list filter invoice=… → 0 rows; GET each line → 404 RECORD_NOT_FOUND; sys_audit_log has per-line action=delete rows (01:45:40.114/.198) before the invoice's (.332) — children went through the public delete path (audit hook fired) pin engine-cascade-delete-atomic.test.ts [in-process]; engine-cascade-delete.test.ts [in-process] — part
    • a3 · pass · LIVE L1: pass — stock escalation arm: DELETE account 4-aPTo… (ref'd by invoice) → 409 code DELETE_RESTRICTED, dependentObject showcase_invoice, dependentCount 1, developerMessage '…or set deleteBehavior:'cascade' on showcase_invoice.account.' (x2). Authored-restrict arm staged via PUT /meta/object qa_l1_rparent + … pin engine-cascade-delete-multivalue-probe.test.ts [in-process] — partial: DELETE_RESTRICTED/dependen
    • a4 · pass · LIVE L1: pass — DELETE referenced account → 409 DELETE_RESTRICTED naming the PARENT delete ('account is required, so it cannot be cleared'), never a 400 'is required'; account + invoice.account intact after; control DELETE of unreferenced account rZpB1KZL… → 200 pin engine-cascade-delete.test.ts [in-process] — partial: escalation + control asserted at the engine; no DELETE door
    • a5 · pass · LIVE L1: pass — parse seam live: PUT /meta/object/qa_l1_mdsn with master_detail deleteBehavior:'set_null' → 422 INVALID_METADATA issue fields.parent.deleteBehavior with the three remedies; object not created (GET 404). Coercion+[cascade-delete] log half is the engine pin's (parent's pin run), not driven live pin engine-cascade-delete.test.ts [in-process]; field.test.ts [unit]
    • n0 · pass · LIVE L1: pass — boot4: account+invoice(account required) → DELETE account → 409 DELETE_RESTRICTED dependentCount 1, never a 400 "is required" (also boot1 x2) pin engine-cascade-delete.test.ts [in-process] — partial: engine throws DELETE_RESTRICTED, not a required 400; wire not observed
    • n1 · pass · LIVE L1: pass — boot4: zoo f_lookups=[X1,X2]; DELETE X2 → 200; re-read f_lookups=["NqvQXVh6MKRUxSvX"] — neither [] nor the dead id pin engine-cascade-delete-multivalue-probe.test.ts [in-process] — partial: engine-level stored effect only
    • n2 · pass · LIVE L1: pass — boot4: invoice+line; DELETE invoice → 200; GET line → 404 RECORD_NOT_FOUND; sys_audit_log delete row for the line at 02:13:10.118Z (child went through public delete path, audit hook fired) pin engine-cascade-delete-atomic.test.ts [in-process] — partial: child hooks fire through the engine cascade; orphan readability over the API not checked
    • n3 · pass · LIVE L1: pass — boot4: qa_l1_rparent with 3 restrict children → 409 DELETE_RESTRICTED dependentCount 3; every refusal observed (5 total) carried count ≥1, never 0

    records-forms.encrypted-field-behavior (rev 5) — PARTIAL

    • a0 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]; secret-fields.test.ts [in-process]
    • a1 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]
    • a2 · partial · pin secret-fields.test.ts [in-process] — partial: echoed-mask no-op asserted at the engine over a stub driver; no HTTP mask-PATCH
    • a3 · partial · pin secret-fields.test.ts [in-process] — partial: fail-closed asserted at engine only; HTTP leg needs a provider-less boot
    • a4 · partial · pin secret-fields.test.ts [in-process] — partial: aggregate rejection asserted on the engine; no HTTP aggregate request
    • n0 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]
    • n1 · partial · pin secret-fields.test.ts [in-process] — partial: no-cleartext-on-row and provider-less refusal asserted at engine only
    • n2 · partial · pin secret-fields.test.ts [in-process] — partial: engine-only mask no-op
    • n3 · partial · pin secret-fields.test.ts [in-process] — partial: engine-only aggregate refusal

    records-forms.field-history-tracking (rev 7) — PARTIAL

    • a0 · partial · pin audit-lookup-summary.test.ts [in-process]; audit-option-label-summary.test.ts [in-process] — partial: rendered summary with field + option labels asserted over a real ObjectQL + audit writers in-process; no HTTP edit + sys_activity read
    • a1 · not-run · no pin (no pin asserts the untracked-edit summary fallback)
    • a2 · partial · pin record-history-display.spec.ts [browser] — partial: account (flag true) History tab opened in a live browser; the task-detail absence half is unpinned
    • a3 · not-run · no pin (no pin reads the derived history operation)
    • a4 · pass · pin audit-lookup-summary.test.ts [in-process]
    • n0 · not-run · no pin (no HTTP edit + sys_activity/timeline read)
    • n1 · not-run · no pin (no pin opens the task detail)
    • n2 · partial · pin audit-option-label-summary.test.ts [in-process] — partial: option labels (not raw values) asserted in-process; no api/timeline read
    • n3 · not-run · no pin (procedural cross-ref scoring guard)

    records-forms.field-type-constraints (rev 4) — PASS

    • a0 · pass · LIVE L1: pass — POST zoo name=201×'a' → 400 VALIDATION_FAILED fields[{field:name,code:max_length,constraint:{maxLength:200,actual:201}}] x2; total 3→3; 200-char name → 201 and re-read length 200; no all-'a' row exists
    • a1 · pass · LIVE L1: pass — f_number -1 → 400 min_value {min:0}; 1001 → max_value {max:1000}; 'abc' → invalid_number; count unchanged; 500 → 201 re-read 500 (also f_currency -1 min_value, f_percent 101 max_value; 0 and 1000 accepted) pin field-zoo-roundtrip.dogfood.test.ts [http-in-process] — partial: only the in-range round-trip half (42) is asserted over HTTP; min_value/max_value/invalid_number refusals unpinned
    • a2 · pass · LIVE L1: pass — POST f_currency 1234.567 → 201, GET 1234.567 unrounded. BUT the clause premise is stale: served f_currency declares no scale/precision (field-zoo.object.ts:60 has min 0 + currencyConfig{fixed,USD} only), field.zod.ts REFUSES scale on currency (PUT qa_l1_scale2 currency scale:2 → 422), and number sc…
    • a3 · pass · LIVE L1: pass — f_select 'not-a-value' → 400 invalid_option options[low,medium,high]; showcase_invoice status 'archived' → 400 invalid_option options[draft,sent,paid,void]; zoo 6→6, invoice 13→13
    • a4 · pass · LIVE L1: pass — 'red' → 201 re-read ["red"]; {x:1} → 400 invalid_type; ['red','purple'] → 400 invalid_option value:'purple' options[red,green,blue]; ['red','blue'] → re-read [red,blue] pin field-zoo-roundtrip.dogfood.test.ts [http-in-process] — partial: valid-array set-equal round-trip half only; scalar coercion, invalid_type and invalid_option refusals unpinned
    • a5 · pass · LIVE L1: pass — f_lookup fabricated → 400 reference_not_found constraint{target:showcase_account}; f_tree and f_master_detail fabricated → reference_not_found likewise; real account id → re-read verbatim. Existence-only boundary: staged qa_l1_lf (lookup lookupFilters status ne churned) accepted churned account MBw… pin engine-lookup-referential-integrity.test.ts [in-process]; field-zoo-roundtrip.dogfood.test.ts [ht
    • a6 · pass · LIVE L1: pass — POST f_autonumber 'HACK-9999' → 201 f_autonumber '0010' + droppedFields[f_autonumber readonly]; GET '0010'; PATCH f_autonumber 'HACK-0001' → 200 droppedFields; GET still '0010' pin engine-autonumber-runtime-owned.test.ts [in-process] — partial: strip on insert and update asserted through protocol/engine in-process over a stub driver; no /data door
    • a7 · pass · LIVE L1: pass — POST f_number 42 f_percent 75 f_formula 999 → 201, GET f_formula 31.5; PATCH f_formula 7 → 200, GET 31.5. Summary: run invoice 2 lines → total 25; all 14 invoices total == Σ line.amount; POST invoice total:999 (no lines) → retained 999, after adding a 12 line → total 12 (self-heal) pin field-zoo-roundtrip.dogfood.test.ts [http-in-process] — partial: formula reads 31.5 over HTTP; direct-write-ignored
    • n0 · pass · LIVE L1: pass — boot4: 201-char name → 400 max_length; zero all-q rows stored (no truncate-and-store)
    • n1 · pass · LIVE L1: pass — boot4: f_select "urgent" → 400 invalid_option; invoice status "void2" → 400 invalid_option
    • n2 · pass · LIVE L1: pass — boot4: POST f_autonumber "FORGED-1" → stored "0024" (sequence), not the forged value pin engine-autonumber-runtime-owned.test.ts [in-process] — partial: forged autonumber stripped at engine in-process only
    • n3 · pass · LIVE L1: pass — no false pass: f_currency 10.005 stored 10.005 unrounded (and 1234.567 in boot1); scale is not reported enforced on currency — note a2 accuracy finding (number scale IS enforced at head)
    • n4 · pass · LIVE L1: pass — boot4: f_lookup "dangling_n4_qa" → 400 reference_not_found; zoo count 23→25 only from the two accepted rows pin engine-lookup-referential-integrity.test.ts [in-process] — partial: dangling lookup refused at engine in-process only

    records-forms.field-type-matrix (rev 6) — PARTIAL

    • a0 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]
    • a1 · not-run · no pin (dom/screenshot per-variant widget table; no browser pin)
    • a2 · not-run · no pin (no pin POSTs an out-of-set select or omits required name on the zoo)
    • a3 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]
    • a4 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]
    • a5 · partial · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process] — partial: real reference ids round-trip verbatim; the dangling-id refusal half is not asserted (data: a lookup accepts an id that does not exist in the referenced object — including the RBAC permission-set link tables #4441)
    • a6 · not-run · no pin (no pin reads showcase_invoice.total or showcase_expense_report roll-ups)
    • n0 · not-run · no pin (no pin posts an out-of-set select value)
    • n1 · not-run · no pin (no pin posts a dangling reference id (ref concedes))
    • n2 · pass · pin field-zoo-roundtrip.dogfood.test.ts [http-in-process]

    records-forms.field-unique-enforcement (rev 10) — PARTIAL

    • a0 · partial · pin memory-unique-constraint.test.ts [unit]; sql-driver-8577-tenant-scoped-declared-unique.test.ts [unit] — partial: driver-level refusal + test-local createAsApi 409 mapping; the REST envelope (developerMessage naming the label, generic error, count) is never read
    • a1 · partial · pin memory-unique-constraint.test.ts [unit] — partial: NULL-distinct asserted at the memory driver only
    • a2 · partial · pin memory-unique-constraint.test.ts [unit] — partial: update refusal and self-update asserted at the memory driver only
    • a3 · partial · pin memory-unique-constraint.test.ts [unit] — partial: updateMany atomicity at the memory driver; no REST predicate-update door driven
    • a4 · partial · pin memory-unique-constraint.test.ts [unit]; sql-driver-8577-tenant-scoped-declared-unique.test.ts [unit]; sql-driver-declared-index-organization-respelling.test.ts [unit] — partial: memory family fully asserted; SQL family asserts field-level bare true → per-org uniqueIndexesFromFields and the no-org exemption (declared-index spelling), bu…
    • a5 · pass · pin memory-unique-constraint.test.ts [unit]
    • n0 · partial · pin memory-unique-constraint.test.ts [unit] — partial: refusal at the driver only
    • n1 · partial · pin memory-unique-constraint.test.ts [unit] — partial: memory driver error asserted free of '[driver-memory]' (expectUniqueViolationEnvelope); SQLite statement text over the REST wire never checked
    • n2 · partial · pin memory-unique-constraint.test.ts [unit] — partial: memory-driver evidence only
    • n3 · pass · pin memory-unique-constraint.test.ts [unit]; sql-driver-declared-index-organization-respelling.test.ts [unit]

    records-forms.form-dirty-guard (rev 4) — PARTIAL

    • a0 · partial · pin discardGuard.test.tsx [component] — partial: jsdom only; X and Cancel paths pinned, Escape and backdrop not; screenshot oracle not reached
    • a1 · not-run · no pin (no pin re-reads the server row after discard/save)
    • a2 · pass · pin discardGuard.test.tsx [component]
    • n0 · partial · pin discardGuard.test.tsx [component] — partial: X path and pristine path pinned in jsdom; Escape/backdrop untested, no live screenshot

    records-forms.gantt-interactions (rev 6) — PASS

    • a0 · pass · LIVE L5: pass — admin, /_console/apps/com.example.showcase/showcase_task/view/showcase_task.gantt (screenshot: 10 rows, bars rendered); mouse drag of getByTestId('gantt-task-bar-JU1EQE9XSh8zPXhZ') 2 days left → PATCH /api/v1/data/showcase_task/JU1EQE9XSh8zPXhZ {start_date:'2026-10-27',end_date:'2026-11-06'} → 200;…
    • a1 · pass · LIVE L5: pass — STAGED fixture: view overlay PUT /meta/view/showcase_task.gantt adding dependenciesField:'notes', lockField:'done' (200, 'Saved customization overlay'); notes='p9hs…'(Warehouse schema, ends 10-30) on Design system, Build homepage and App wireframes(done=true). Toolbar gantt-auto-schedule → dialog '… pin GanttView.autoscheduledlg.test.tsx [component]; GanttView.countinterp.i18n.test.tsx [component] —
    • a2 · pass · LIVE L5: pass — same staged overlay (lockField:'done'): locked leaf App wireframes (Kw0H…) has no resize grips (gantt-task-resize-right count 0); body drag +220px and, on a fresh load, -250px on Kw0H… and on Audit current IA (9cY4…, done) → 0 data writes, row set byte-identical (x2); auto-schedule apply left Kw0H…… pin GanttView.dnd.test.tsx [component]; scheduling.selfextent.test.ts [unit] — partial: pure schedule
    • a3 · pass · LIVE L5: pass — invited+signed-up qa-l5-contrib-…@verify.test, bound sys_user_position contributor (200); member list GET showcase_task → 2 of 10 (own assignee rows). Member opens gantt; admin PATCH assignee→admin@objectos.ai (200); member drags PII bar → PATCH showcase_task/JU1E… {start_date:'2026-10-29',end_date…
    • n0 · pass · LIVE L5: pass — every repainting drag landed a PATCH (a0 200 + re-read; a1 apply 2×200); the one 4xx (a3 404) snapped the bar back with no write; locked drags repainted nothing and wrote nothing

    records-forms.import-job-undo-cancel (rev 7) — PASS

    • a0 · pass · LIVE L3: pass — LIVE leg on SHOWCASE (wave-1 pins targeted app-crm): CSV built from showcase_task metadata required fields title,project(master_detail→showcase_project),status + notes marker. POST /api/v1/data/showcase_task/import/jobs (20 rows) → 201 jobId imp_mvq1d7lfryx3as7i; poll → status succeeded, created 20…
    • a1 · pass · LIVE L3: pass — API: marker count pre 0 → post-import 20 → POST /import/jobs/imp_mvq1d7lfryx3as7i/undo 200 {deleted:20,restored:0,failed:0} → post-undo 0; unfiltered showcase_task total 10→30→10 (no collateral). Console: History → 'Undo import' (native confirm accepted) → POST …/imp_mvq1ljcl2rg3a0t1/undo 200 {dele…
    • a2 · pass · LIVE L3: pass — 400-row import imp_mvq1jsvuxengf7r8, cancel POSTed at 7.3s when marker count = 200 (first 200-row batch committed) → 200 {success:true}; job terminal: status cancelled, processed 200, created 200, results 200 rows; committed rows = 200, all complete (title/project/status/notes set, 200 distinct tit…
    • a3 · pass · LIVE L3: pass — GET /api/v1/data/import/jobs lists {jobId,status,total,created,undoable,createdAt,completedAt}: fresh job undoable:true with no revertedAt key; after undo undoable:false + revertedAt 01:58:30.894Z; cancelled-partial after undo undoable:false + revertedAt; console History renders the same distinctio…
    • n0 · pass · LIVE L3: pass — Undo removed exactly the imported set in all 3 undos (20, 5, 200) with unfiltered totals returning to baseline.
    • n1 · pass · LIVE L3: pass — No half-written rows after cancel (0 torn of 200).
    • n2 · pass · LIVE L3: pass — No clause was scored from a skipped spec: the gated console spec was not run (steps0.gated-spec = not-run), and a0–a3 rest only on live API reads and the hand-driven console route on showcase_task.

    records-forms.import-wizard-encoding-and-hints (rev 7) — PARTIAL

    • a0 · pass · pin importParsers.test.ts [unit]
    • a1 · pass · pin importMissingRequiredHint.test.tsx [component]
    • a2 · pass · pin importLegacyReferenceGuard.test.tsx [component]
    • a3 · not-run · no pin (server read-back of imported rows not pinned; component pins mock the data source)
    • n0 · not-run · no pin (wired wizard preview in a browser not driven; native picker hand-off not automated)
    • n1 · not-run · no pin (silent drop needs a live import + API read)

    records-forms.list-view-capabilities (rev 7) — PASS

    • a0 · pass · LIVE L2: pass — one artifact per variant, all on this boot: saved-view-filter (in_progress GET filter AST, 200, total 2), quick-search (search=huaning → 华宁科技), sort (tabular sort=-estimate_hours), server-pagination (inquiry top=50 / top=50&skip=50), saved-view-switcher (tab click → /view/showcase_task.in_progress …
    • a1 · pass · LIVE L2: pass — tab click In Progress → GET /api/v1/data/showcase_task?populate=project&top=50&select=…&filter=[["status","equals","in_progress"]] → 200, total 2, 2 rows; screenshot count bar '2 records' pin saved-view-filter.spec.ts [browser] — partial: asserts no showcase_task data response ≥400 and the count bar starts "2 "; never captures the AST filter param nor compares the count bar to the response total
    • a2 · pass · LIVE L2: pass — Accounts quick-search 'huaning' → GET showcase_account?top=50&search=huaning → 200 records [华宁科技], and the grid shows 华宁; a direct GET /api/v1/data/showcase_account?search=huaning returns total 1 [华宁科技]
    • a3 · pass · LIVE L2: pass — staged 55 inquiries (createMany; 58 total). Page 1 GET showcase_inquiry?top=50 → 50 rows total 58; Next page → top=50&skip=50 → 8 rows; union 58 ids, 58 distinct, 0 missing vs direct API read; no unpaged fetch (the only other request was top=0)
    • a4 · pass · LIVE L2: pass — Task List tab → GET showcase_task?…&sort=-estimate_hours → 200; estimates 60,40,30,24,20,18,16,16,12,8… (non-increasing); 0 pageerrors
    • a5 · pass · LIVE L2: pass — Grid view (inlineEdit) on 'Content backlog': dblclick estimate 12 → 13, Save All (1) → PATCH /api/v1/data/showcase_task/6ox1m9FwEH6fLutw body {estimate_hours:13} → 200; full-row diff before/after shows only estimate_hours 12→13 plus updated_at/updated_by; reload shows 13 pin inline-edit-polish-2572.spec.ts [browser] — partial: pins only the PATCH-body half (budget present, spent absent) on a Project
    • a6 · pass · LIVE L2: pass — grant provisioned: PUT /api/v1/meta/permission/qa_task_export {objects:{showcase_task:{allowRead,allowExport}}} + POST sys_user_permission_set {user_id:admin, permission_set:'qa_task_export'}; before that the export route answered 403 EXPORT_NOT_PERMITTED. With the grant, in_progress Display popove…
    • a7 · pass · LIVE L2: pass — Display popover → view-switcher-dropdown lists exactly Grid, Kanban, Gallery, Calendar, Timeline, Gantt; switched to each and took a screenshot: every one renders showcase_task records (Kanban: per-status finds, totals sum to 65; Calendar: due_date window filter + is_null, 62; Timeline: 65; Gantt: … pin user-filters.spec.ts [browser] — partial: asserts the six whitelisted entries and that the trigge
    • a8 · pass · LIVE L2: pass — bulk_actions, 3 rows → Mark Done → 3× POST /api/v1/actions/showcase_task/showcase_mark_done {recordId} (one per row); 2 rows → Recalculate Selection → 1× POST /api/v1/apps/showcase/recalc {_selectedIds:[2 ids]} (top level) → 200
    • a9 · pass · LIVE L2: pass — legacy_row_actions row menu (screenshot) = Mark Done, Reassign…, Quick View, Recalculate Estimate; Quick View appears once and opens the showcase_component_gallery modal (type modal, by design); Recalculate Estimate → POST /api/v1/apps/showcase/recalc {recordId} → 200, then the list refetches
    • n0 · pass · LIVE L2: pass — staged overlay PUT /api/v1/meta/view/showcase_task.done with filter done equals 'maybe' (authoring accepted it). Opened the view on 2 fresh loads: the data GET → 400 INVALID_FILTER, 0 rows, 'This view's query was rejected' + Retry, no unfiltered rows. Reverted with DELETE (reset to artifact)
    • n1 · pass · LIVE L2: pass — staged overlay userFilters {element:'tabs', tab 'QATabZeta'} on showcase_task.urgent: the tab is not rendered, and the console warns '[ObjectView] … defines userFilters (element: "tabs"), which are ignored on an object list view'. Dropdown chips filter-badge-status/health do render on All Projects …
    • n2 · pass · LIVE L2: pass — all 3 exported files contain only the 2 in_progress rows (see a6)

    records-forms.master-detail-atomic-save (rev 8) — PARTIAL

    • a0 · partial · pin form-view-subforms.spec.ts [browser]; master-detail.spec.ts [browser] — partial: the first /api/v1/batch carries the parent op and a child op with {$ref:0} (project+task and invoice+one line); no pin counts batch calls, so "not N sequential…
    • a1 · not-run · no pin (no pin re-reads master + lines via API after save)
    • a2 · not-run · no pin (no pin reads invoice.total)
    • a3 · not-run · no pin (no pin drives a failing child save)
    • a4 · pass · pin form-view-subforms.spec.ts [browser]
    • a5 · partial · pin form-view-subforms.spec.ts [browser] — partial: live client recompute pinned (data-computed amount 59.98) and the batch carries amount 59.98; the stored column is never re-read
    • n0 · not-run · no pin (no pin drives the invalid-child save and API re-read)
    • n1 · not-run · no pin (pins read the first batch only; request count never asserted)

    records-forms.object-hook-lifecycle (rev 10) — PARTIAL

    • a0 · partial · pin showcase-public-form.dogfood.test.ts [http-in-process] — partial: pin asserts source='web'/status='new' over HTTP but through POST /forms/contact-us/submit with a SYSTEM engine re-read; the /data door POST + GET named by the …
    • a1 · not-run · no pin (no pin writes a padded title and re-reads)
    • a2 · partial · pin hook-condition-previous-scope.test.ts [in-process] — partial: real-engine (stub driver) proves the transition hook fires on the completing update; the 'task completed: ‹title›' server-log line via the log capability is ne…
    • a3 · partial · pin hook-condition-previous-scope.test.ts [in-process] — partial: two-root non-transition no-fire asserted in-process/unit via handler invocation; no server-log diff
    • a4 · not-run · no pin (no pin drives the showcase over-budget warn hook)
    • a5 · partial · pin hook-condition-merged-record.test.ts [in-process] — partial: stored ⊕ payload merge (fires on a field the patch lacks; no fire when condition false) asserted in-process; no log oracle
    • a6 · not-run · no pin (hef pin is a throwing beforeDelete (row survives); no pin drives a throwing beforeInsert POST + filtered count)
    • a7 · partial · pin hook-binder.test.ts [unit]; hook-condition-fail-loud.test.ts [unit] — partial: onError:'log' swallow + '[hook] handler failed (onError=log' log asserted in the wrapper unit; no persisted PATCH re-read over a door
    • a8 · partial · pin hook-condition-fail-loud.test.ts [unit] — partial: fail-closed HookConditionError outside onError/retry/async asserted in the wrapper unit; the 400 VALIDATION_ERROR wire envelope and no-row count are not driven
    • a9 · not-run · no pin (no pin asserts priority-ordered execution of two hooks)
    • n0 · partial · pin hook-error-format.dogfood.test.ts [http-in-process] — partial: beforeDelete half: blocked delete returns 400 and the row survives over HTTP (hef_ref_guard, default onError); beforeInsert POST half not driven
    • n1 · partial · pin hook-binder.test.ts [unit]; hook-condition-fail-loud.test.ts [unit] — partial: wrapper unit shows a logged async failure resolves; no HTTP re-read proving the write persisted
    • n2 · partial · pin hook-condition-previous-scope.test.ts [in-process] — partial: in-process real engine asserts the audit fires on done:false→true; server log line not observed
    • n3 · partial · pin hook-condition-previous-scope.test.ts [in-process] — partial: in-process/unit assert no fire on non-transition updates; no log diff
    • n4 · partial · pin hook-condition-fail-loud.test.ts [unit] — partial: unevaluable condition rejects (before* and after*) without a "skipped" log at the wrapper unit; no write probe at a door

    records-forms.predicate-relationship-traversal (rev 4) — PARTIAL

    • a0 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: accept leg asserted on a real engine (crm_opportunity fixture); no HTTP create + read-back
    • a1 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: refusal with the authored message asserted (toThrow regex) at the engine; the 400 VALIDATION_FAILED _record/rule_violation envelope is not observed
    • a2 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: FK off the merged/prior row asserted at the engine; no HTTP PATCH
    • a3 · pass · pin engine-predicate-relationship.test.ts [in-process]
    • n0 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: engine refuses the churned write; HTTP 2xx check not driven
    • n1 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: engine shows readable-parent writes accepted (no unevaluable fault); HTTP refusal text not read
    • n2 · partial · pin engine-predicate-relationship.test.ts [in-process] — partial: system-authority read asserted at engine; no persona HTTP leg

    records-forms.record-clone-contract (rev 3) — PASS

    • a0 · pass · LIVE L1: pass — staged qa_l1_noclone via PUT /meta/object (enable:{clone:false}, GET confirms); POST /data/qa_l1_noclone/XpNc…/clone → 403 {code:CLONE_DISABLED, error:"Cloning is disabled for object 'qa_l1_noclone'"} x2; row total 1 before/after; control POST /data/showcase_account/4-aPTo…/clone → 201
    • a1 · pass · LIVE L1: pass — account clone overrides {name:'os-qa-clone-override', created_by:auditor, created_at:2001…, owning_business_unit_id, organization_id forged} → 201 name=override, created_by=admin, created_at fresh, org/obu re-derived, droppedFields[{fields:[owning_business_unit_id,organization_id],reason:readonly}]…
    • a2 · pass · LIVE L1: pass — raw 201 top-level keys [object,id,sourceId,record,droppedFields] — no data/result envelope; id DBavBm… ≠ sourceId 4-aPTo…; droppedFields is an optional member of CloneDataResponseSchema (protocol.zod.ts) pin search-clone-route-schema-conformance.test.ts [unit]; search-clone-schema-conformance.test.ts [unit] — partial: bare 201 shape asserted on the RestServer handler with a mocked protocol and on th
    • a3 · pass · LIVE L1: pass — live body scan (supplementing the pins): staged qa_l1_int with secret_note {internal:true}; create 201 and clone 201 bodies both omit secret_note. Pin halves (search-clone-schema-conformance, write-response-internal-fields tripwire) are the parent's pin run pin protocol.write-response-internal-fields.tripwire.test.ts [unit]; search-clone-schema-conformance.test.ts [unit]
    • a4 · pass · LIVE L1: pass — POST /data/showcase_account/nonexistent_id_qa/clone → 404 RECORD_NOT_FOUND; POST /data/qa_l1_no_such_object/abc/clone → 404 OBJECT_NOT_FOUND "Object '…' is not registered" — byte-identical to GET/POST on the same unregistered object (shared gate)
    • n0 · pass · LIVE L1: pass — boot4: qa_l1_noclone clone → 403 CLONE_DISABLED; default-flag showcase_account and qa_l1_ro clones → 201 (absent ≠ disabled)
    • n1 · pass · LIVE L1: pass — boot4: qa_l1_ro clone overrides {approval_status:approved} → 201 droppedFields[approval_status readonly]; re-read approval_status=pending
    • n2 · pass · LIVE L1: pass — boot4: raw 201 keys object,id,sourceId,record (no envelope), id≠sourceId pin search-clone-route-schema-conformance.test.ts [unit] — partial: bare body asserted on the handler with mocked cloneData only
    • n3 · pass · LIVE L1: pass — NOTE, not a clause — recorded: console dist src bundle has no data.clone caller (only the SDK client method in vendor-objectstack and permission-set/automation clone routes); surface is API-only at this build

    records-forms.record-discussion-mentions (rev 7) — PARTIAL

    • a0 · pass · LIVE L3: pass — Console post on showcase_account 732rmDerZ7pU1I1E (Wayne Enterprises): POST /api/v1/data/sys_comment id 8ba8f9e6-… thread_id showcase_account:732rmDerZ7pU1I1E mentions ["wzH5…"(qa-mem1)] → 201; GET sys_comment filter thread_id → row present with body 'QA-m1 ping @qa mem1 please review', created_at … pin comments-permission-matrix.dogfood.test.ts [http-in-process] — partial: carrier-neutral only: a p
    • a1 · pass · LIVE L3: pass — Screenshot-confirmed feed: row count for the posted text = 1 at +250ms (optimistic), 1 at +6s (no sys_comment refetch issued in that window), 1 after page reload (server row, Discussion (1)); client POST carried id 8ba8f9e6-… and the 201 echoed the same id — no dupe, no phantom.
    • a2 · pass · LIVE L3: pass — After admin PATCH website (sys_activity PiLndH8Pc0elx1hh type updated 01:52:24) and a 2nd comment: 'All Activity' feed (screenshot, then DOM) shows comment(01:51:47) → 'Updated Account "Wayne Enterprises": Website' (01:52:24) → comment 'QA-m2 after edit' — one feed, two tables, oldest-first. Discus…
    • a3 · pass · LIVE L3: pass — qa-mem1 (admin-minted, password changed, re-signed in via form): header 'Open inbox' badge 1; GET /api/v1/notifications unreadCount 1, collab.mention actionUrl /showcase_account/732rmDerZ7pU1I1E; panel screenshot 'Dev Admin mentioned you'; clicking it navigated to /_console/apps/com.example.showcas…
    • a4 · pass · LIVE L3: pass — Non-mentioned qa-mem2: bell badge empty, panel shows no 'mentioned you' item, GET /api/v1/notifications unreadCount 0 / []. Author (admin) inbox: no collab.mention (only 3 approval.requested). mem2 GET /api/v1/data/sys_notification → 403 (cannot read others' rows). pin mention-recipient-gate.integration.test.ts [in-process] — partial: engine-layer producer half only (emit audience = mentioned reader
    • a5 · pass · LIVE L3: pass — Recipe replayed with deviation: PUT /api/v1/meta/object/qa_nofeeds?package=com.objectstack.qa.feeds → 422 NAMESPACE_PREFIX ('rename to feeds_qa_nofeeds'); re-authored as feeds_qa_nofeeds (enable.feeds:false, public_read_write) → 200. POST sys_comment thread_id feeds_qa_nofeeds:iVu4miO6bjFzTB5n → 40… pin comments-permission-matrix.dogfood.test.ts [http-in-process] — partial: 403 + code FEEDS_DISABLED
    • a6 · pass · LIVE L3: pass — PATCH sys_comment/8ba8f9e6-… {thread_id:feeds_qa_nofeeds:iVu4miO6bjFzTB5n} → 403 FEEDS_DISABLED; re-read thread_id still showcase_account:732rmDerZ7pU1I1E. Controls: re-thread to showcase_account:G5a5DAvrtuZfcCYj → 200 and back → 200; body-only edit → 200 (body updated, thread unchanged). pin capability-gate-update-verb.test.ts [in-process] — partial: real ObjectQL over a stub driver: refusal and un
    • a7 · pass · LIVE L3: pass — Filter control offers exactly All Activity / Comments Only / Field Changes / Tasks Only. Wayne: all=3 (2 comments+1 update), comments_only=2 comments, changes_only=1 'Updated Account…: Website', tasks_only=0 ('No comments yet', empty subset, correct), back to all=3. Screenshot before each DOM read;…
    • a8 · pass · LIVE L3: pass — Live milestone channel (no pin substitution): authored scratch object feeds_qa_milestone (pkg com.objectstack.qa.feeds) with activityMilestones [{field:status,value:shipped,type:'qa_custom_shipped'}]; PATCH status→shipped wrote sys_activity gL3mQmUUhqYugfK1 type qa_custom_shipped. Console 'all' fee… pin recordActivityFeed.test.ts [unit] — partial: pure activityRowToFeedItem maps an unknown type to U
    • a9 · partial · LIVE L3: pass — single boot: admin-owned showcase_private_note gkbR2T2q2AqtY7Qv (member GET → 404) and showcase_account G5a5DAvrtuZfcCYj (member GET → 200). Admin POST 3 comments (note by user id → 201, note by email qa-mem1@example.com → 201, account naming member id + admin id → 201). Member inbox: +1 collab.men… sub-leg a9.walled blocked: n/a pin mention-recipient-gate.integration.test.ts [in-process] — partia
    • n0 · pass · LIVE L3: pass — Reboot 2: console post with @mention on showcase_account G5a5DAvrtuZfcCYj (sys_comment ec62202a-…): rows with that text = 1 at +250ms (optimistic), 1 at +6s, 1 after reload; server thread read holds exactly one row with that id — no dupe, no phantom (also a1, boot 1).
    • n1 · pass · LIVE L3: pass — Reboot 2: the mention named qa-mem1 only → qa-mem1 GET /api/v1/notifications +1 collab.mention (actionUrl /showcase_account/G5a5DAvrtuZfcCYj); qa-mem2 (non-mentioned) unread 0, no row; admin author 0 rows for that comment. pin mention-recipient-gate.integration.test.ts [in-process] — partial: engine: audiences equal exactly the admitted mentioned ids; per-user inbox over HTTP not driven
    • n2 · pass · LIVE L3: pass — feeds:false hides the panel: console /_console/apps/com.example.showcase/feeds_qa_nofeeds/record/iVu4miO6bjFzTB5n renders the record with no Discussion section, no comment box, and ZERO sys_comment/sys_activity requests (control account record issued both GETs); server half per a5/a6. pin comments-permission-matrix.dogfood.test.ts [http-in-process] — partial: server 403 half on the own fixture; pane
    • n3 · pass · LIVE L3: pass — Reboot 2: PATCH sys_comment/ec62202a-… {thread_id:feeds_qa_nofeeds:iVu4miO6bjFzTB5n} → 403 FEEDS_DISABLED; re-read thread_id still showcase_account:G5a5DAvrtuZfcCYj; nofeeds thread holds 0 rows — refused AND not moved (also a6, boot 1 with 2xx controls). pin capability-gate-update-verb.test.ts [in-process] — partial: engine: refusal and thread_id unchanged on re-read; REST PATCH layer missing
    • n4 · pass · LIVE L3: pass — Both FEEDS_DISABLED clauses carry their 2xx enabled-parent controls (a5/a6).
    • n5 · pass · LIVE L3: pass — Reboot 2, screenshot then DOM per mode: Wayne all=4 (3 comments+1 update) / comments_only=3 comments only / changes_only=1 update only / tasks_only=0 / all=4 restored; milestone record: custom qa_custom_shipped row present in all (2 rows), absent from comments(0)/changes(1, the created row only)/ta… pin recordActivityFeed.test.ts [unit] — partial: unit: unknown/missing type is mapped, not dropped; p
    • n6 · pass · LIVE L3: pass — Reboot 2: member GET private note gkbR2T2q2AqtY7Qv → 404, GET account 1Osk4LiwrlMmjar5 → 200. Admin comments: note+mention by id → 201, note+mention by email → 201, account+mention by EMAIL → 201. Member inbox gained exactly 1 collab.mention (n6-acct-email, actionUrl /showcase_account/1Osk4LiwrlMmj… pin mention-recipient-gate.integration.test.ts [in-process] — partial: engine layer both directions (

    records-forms.related-list-server-pagination (rev 8) — PARTIAL

    • a0 · not-run · no pin (no pin observes related-list network requests (ref concedes))
    • a1 · not-run · no pin (no pin reads the pager or pages)
    • a2 · pass · pin detail-related-list.spec.ts [browser]
    • a3 · not-run · no pin (Invoices tab title/columns not asserted)
    • a4 · not-run · no pin (no row navigation or API re-read pinned)
    • a5 · not-run · no pin (no persona read-gate leg pinned)
    • n0 · not-run · no pin (network requests not observed)
    • n1 · not-run · no pin (pager total not compared to API count)
    • n2 · not-run · no pin (no contributor persona leg)

    records-forms.v18-semantic-defaults (rev 3) — PARTIAL

    • a0 · pass · pin field-autonumber-default-unique.test.ts [unit]; record-surface.test.ts [unit]; view.test.ts [unit]
    • a1 · partial · pin view.test.ts [unit] — partial: schema default of 50 asserted at spec parse; no rendered list row count
    • a2 · partial · pin view.test.ts [unit] — partial: editInline default true asserted at spec parse; the per-persona offered/absent affordance is not rendered
    • a3 · partial · pin record-surface.test.ts [unit] — partial: surface derivation asserted as a pure function; no rendered desktop/mobile screenshot

    records-forms.view-type-gallery (rev 2) — PARTIAL

    • a0 · not-run · no pin (per-variant visualization screenshots; smoke asserts page render (no pageerror, non-empty main) only)
    • a1 · not-run · no pin (kanban totals vs API aggregate not pinned)
    • a2 · not-run · no pin (temporal placement vs API dates not pinned)
    • a3 · not-run · no pin (marker count / chart SVG binding not pinned (smoke only checks chart box size on chart surfaces))
    • a4 · not-run · no pin (tree nesting vs API parent fields not pinned)
    • a5 · partial · pin showcase-smoke.spec.ts [browser] — partial: smoke asserts no pageerror + non-empty main on the seven named surfaces (and the grid/chart ones), but no SURFACES entry opens the business-unit tree (org_char…
    • n0 · not-run · no pin (grid-fallback detection per variant not asserted by smoke)
    • n1 · not-run · no pin (procedural evidence caution (single-datapoint))

    records-forms.write-answer-advisories-rollback-and-tree-delete (rev 2) — PARTIAL

    • a0 · pass · pin advisory-write-answer.test.ts [in-process]; delete-behavior-referenceless-tree.test.ts [http-in-process]; engine-after-hook-abort-unit.test.ts [in-process]; engine-cascade-delete-tree.test.ts [in-process]; engine-cascade-delete.test.ts [in-process]
    • a1 · partial · pin advisory-write-answer.test.ts [in-process] — partial: warnings[] / absent key asserted on ObjectStackProtocolImplementation in-process; REST PATCH body not observed
    • a2 · partial · pin engine-after-hook-abort-unit.test.ts [in-process] — partial: refusal + rollback asserted on ObjectQL directly; no HTTP status/count
    • a3 · pass · pin delete-behavior-referenceless-tree.test.ts [http-in-process]
    • n0 · partial · pin engine-after-hook-abort-unit.test.ts [in-process] — partial: engine-level rollback only

    records-forms.write-time-option-and-element-shape-judgement (rev 1) — PARTIAL

    • a0 · pass · pin engine-field-predicate-fault.test.ts [in-process]; engine-multi-reference-element-shape.test.ts [in-process]; import-kept-option-values.test.ts [in-process]; record-validator.kept-option-values.test.ts [unit]; rule-validator.option-visibility.test.ts [unit]; validate-preview-parent.test.ts [in-process]; validate-update-stored-row.test.ts [in-process]
    • a1 · partial · pin engine-field-predicate-fault.test.ts [in-process] — partial: rule_violation with constraint.reason unevaluable asserted on the engine; no 400 wire body
    • a2 · partial · pin import-kept-option-values.test.ts [in-process] — partial: kept value stored, dry-run agreement and later-PATCH judgement asserted through protocol/engine in-process; import + PATCH doors not driven
    • a3 · partial · pin import-kept-option-values.test.ts [in-process]; validate-preview-parent.test.ts [in-process] — partial: dry-run/write parity asserted in-process; import doors not driven
    • a4 · partial · pin engine-multi-reference-element-shape.test.ts [in-process] — partial: invalid_type naming the FIELD asserted on the engine (caller/system × team/watchers × boolean/number/embedded-record); the located element index is never asser…

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Per-clause detail, part 2/3 — areas: integration-system, platform-core. One line per clause: aK = acceptance[K], nK = negative[K]; verdict; evidence. pin FILE [layer] = the passing pin(s) that assert it (all named pins passed on 756220c); partial: names the layer or half the pin does not reach; LIVE Ln: = the live-leg oracle line from that runner's boot, which decides the clause.

    integration-system

    integration-system.connector-auth-kind-application (rev 4) — PARTIAL

    • a0 · partial · pin rest-connector.test.ts [unit] — partial: all five shapes asserted on the request built through a stubbed fetch (query form also asserts no X-API-Key header); the clause's oracle is what an echo upstre…
    • a1 · partial · pin connector-materialization.test.ts [in-process] — partial: LiteKernel shows the factory receives the resolved value, never the ref, over a fake provider; no meta read of the ref string nor echo capture of the value
    • a2 · partial · pin connector-materialization.test.ts [in-process] — partial: in-process boot rejects with /credentialRef 'MISSING' did not resolve/ only; connector, provider and both remedies, and the served boot output, unasserted
    • a3 · partial · pin connector-provider.test.ts [unit] — partial: inline-authentication half refused at schema level (/must not inline secrets/); the oauth2-discriminator half has no pin; no build run
    • a4 · not-run · no pin (no pin greps served connector listing or /meta bodies for resolved secret values)
    • n0 · not-run · no pin (served-body secret absence not pinned)
    • n1 · partial · pin connector-provider.test.ts [unit] — partial: inline non-none authentication refused at schema parse; oauth2 build-clean case unpinned
    • n2 · partial · pin connector-materialization.test.ts [in-process] — partial: in-process kernel boot rejects (does not materialize then fail at dispatch); served boot not observed

    integration-system.connector-declarative-boot (rev 5) — PARTIAL

    • a0 · partial · pin showcase-declarative-mcp.dogfood.test.ts [http-in-process] — partial: mcp variant origin+state asserted over GET /automation/connectors; rest and openapi variants assert state 'ready' only, origin unasserted — the clause asks one…
    • a1 · partial · pin showcase-declarative-mcp.dogfood.test.ts [http-in-process] — partial: mcp actions asserted by toContain('echo_upper') (containment, not equality with tools/list); openapi actions (getHealth) never asserted
    • a2 · partial · pin showcase-declarative-mcp.dogfood.test.ts [http-in-process] — partial: mcp echo flow's run output containing OBJECTSTACK asserted; the rest ping flow (health payload) is never triggered
    • a3 · partial · pin connector-provider.test.ts [unit] — partial: all three superRefine messages asserted by regex fragment at schema-parse unit level (pin not in ref); the build gate output (objectstack build of a scratch pa…
    • a4 · partial · pin connector-materialization.test.ts [in-process] — partial: LiteKernel boot rejects with /provider '…'.*no provider factory/ in-process (pin not in ref); the served boot's fatal output is not observed
    • a5 · partial · pin connector-materialization.test.ts [in-process] — partial: engine registry (getRegisteredConnectors) omits disabled/removed instances in-process over a fake provider (pins not in ref); GET /automation/connectors after …
    • n0 · pass · pin showcase-declarative-mcp.dogfood.test.ts [http-in-process]
    • n1 · partial · pin connector-provider.test.ts [unit] — partial: schema refuses each of (a)-(c) at unit parse level; no build is run, so 'builds clean' is not observed at the build gate

    integration-system.connector-descriptor-audit (rev 3) — PASS

    • a0 · pass · LIVE L1: pass — boot2.log 01:53:05.662Z WARN "[Automation] 1 declarative connector(s) declare actions but are not registered in the connector registry — the connector_action node cannot dispatch them: qa_l1_inert_conn3. … Install/instantiate the matching connector plugin, or mark a deliberate catalog-only entry wi… pin connector-descriptor-audit.test.ts [in-process] — partial: LiteKernel + AutomationServicePlugin o
    • a1 · pass · LIVE L1: pass — (a) stock boot.log (ready 01:44:25) has 0 audit lines though WARN lines do print; showcase_erp_catalog (enabled:false) never named in any of the 4 warnings; disabling qa_l1_inert_conn/conn2 dropped them from the next re-audit, and boot3.log (all scratch descriptors enabled:false) has 0 audit lines … pin connector-descriptor-audit.test.ts [in-process] — partial: (a) and (b) quiet asserted in-process
    • a2 · pass · LIVE L1: pass — no restart: PUT ?mode=draft + POST /meta/connector/qa_l1_inert_conn2/publish at 01:51:09.4 → boot.log 01:51:10.070Z WARN … 2 declarative connector(s) … : qa_l1_inert_conn, qa_l1_inert_conn2; republish conn2 enabled:false 01:51:36.6 → 01:51:37.295Z warn lists only qa_l1_inert_conn; conn enabled:fals…
    • n0 · pass · LIVE L1: pass — stock boot.log (before any scratch publish, ready 01:44:25) has 0 inert-connector warnings while other WARNs print; showcase_erp_catalog keeps enabled:false; boot3/boot4 (scratch all disabled + rest same-name) also 0
    • n1 · pass · LIVE L1: pass — provider-bound showcase_status_api/showcase_status_openapi/showcase_mcp_tools (origin declarative, state ready) never named in any of the 5 warnings across stock boot, 4 reload audits and boots 2–4

    integration-system.connector-stdio-default-deny (rev 3) — PARTIAL

    • a0 · partial · pin mcp-provider.test.ts [unit] — partial: deny text /stdio transports are disabled by default/ asserted on the provider factory over a fake client; the boot output is never observed
    • a1 · partial · pin mcp-provider.test.ts [unit] — partial: mismatch text 'not in the host's declarativeStdio allowlist [npx, my-mcp]' asserted at the provider factory; no boot output
    • a2 · partial · pin connector-materialization.test.ts [in-process]; mcp-provider.test.ts [unit] — partial: unit asserts isConnectorUpstreamUnavailable(err)=false; in-process kernel (fake factory, not the mcp deny) shows plain throws are boot-fatal and reload-soft; t…
    • a3 · pass · pin showcase-declarative-mcp.dogfood.test.ts [http-in-process]
    • n0 · partial · pin mcp-provider.test.ts [unit] — partial: factory rejects before the client factory is handed a transport (seen.transport undefined) over a fake client; no real boot observes that no subprocess spawns
    • n1 · partial · pin mcp-provider.test.ts [unit] — partial: non-retryable classification asserted at the provider; no boot or listing shows absence of a degraded husk with backoff

    integration-system.datasource-admin-lifecycle (rev 7) — PARTIAL

    • a0 · partial · pin admin-routes-auth-guard.test.ts [http-in-process]; admin-routes.test.ts [http-in-process] — partial: real HonoHttpServer + registrar, but over a stub service and a FAKE session-auth/grants engine; both halves held at route layer only, the curated driver set vs…
    • a1 · partial · pin admin-routes-auth-guard.test.ts [http-in-process] — partial: all 11 routes asserted 401 UNAUTHENTICATED / 403 PERMISSION_DENIED naming the capability, before dispatch, on a real Hono adapter — but with a fake session-aut…
    • a2 · partial · pin admin-routes.test.ts [http-in-process] — partial: secret split asserted at the route over a stub service; the no-persistence half (unchanged list afterwards) and 'test' not captured as a name are not asserted …
    • a3 · partial · pin datasource-admin-plugin.test.ts [in-process]; datasource-credential-migration.test.ts [unit] — partial: service.migrateCredential re-homes/refuses in-process and the planner states none/refuse outcomes as a pure function; the door's 200-with-plan answer and the p…
    • a4 · partial · pin admin-routes.test.ts [http-in-process]; datasource-meta-door-reaches-admin-door.dogfood.test.ts [http-in-process] — partial: showcase dogfood asserts POST /datasources 201 and listing origin 'runtime' (pins not in ref); the listed health 'status' field is never asserted (pool state r…
    • a5 · partial · pin datasource-admin-plugin.test.ts [in-process]; datasource-config-redaction.test.ts [in-process] — partial: service-level getDatasource redaction and credentialsRef persistence asserted (pins not in ref); no case GETs list/detail over HTTP after a secret-bearing crea…
    • a6 · pass · pin datasource-admin-record-judgement.test.ts [http-in-process]; envelope.conformance.test.ts [http-in-process]
    • a7 · pass · pin admin-routes.test.ts [http-in-process]; envelope.conformance.test.ts [http-in-process]
    • a8 · partial · pin datasource-restore-environment-rows.dogfood.test.ts [http-in-process]; datasource-route-ledger.conformance.test.ts [unit]; datasource-unknown-name.test.ts [http-in-process] — partial: ledger half whole; 404 RESOURCE_NOT_FOUND asserted on a real Hono + real service (fake store/auth) and 404 status on the booted showcase, but no single served-…
    • n0 · partial · pin datasource-config-redaction.test.ts [in-process] — partial: redaction at the service read; no HTTP list/detail body grep
    • n1 · partial · pin admin-routes-auth-guard.test.ts [http-in-process] — partial: no-200 for anonymous/unentitled asserted on all 11 routes over fake auth/grants; served stack not driven
    • n2 · partial · pin admin-routes-auth-guard.test.ts [http-in-process] — partial: route dispatches testConnection on a service double; no case reads the store/list after the probe
    • n3 · partial · pin datasource-admin-plugin.test.ts [in-process]; datasource-credential-migration.test.ts [unit] — partial: bind drops the inline key in-process and a clean row plans 'none'; the door's 200 (not 400) for a clean row is not driven
    • n4 · pass · pin admin-routes.test.ts [http-in-process]
    • n5 · pass · pin admin-routes.test.ts [http-in-process]

    integration-system.email-template-render (rev 8) — PARTIAL

    • a0 · partial · pin email-template-materialization.dogfood.test.ts [in-process] — partial: real stack + capturing transport: subject exact 'Authored reset for Ada', body by toContain('Authored body'); zero-{ {residue} } on the body never asserted, and …
    • a1 · partial · pin send-template.test.ts [unit] — partial: EmailService over a fake loader and capture transport asserts MISSING_VARIABLES (pin not in ref); whether the error names the variable, and the optional-variab…
    • a2 · partial · pin send-template.test.ts [unit] — partial: TEMPLATE_INACTIVE asserted over a fake loader row (pin not in ref); the registry-resolved inactive item is not driven
    • a3 · partial · pin email-template-materialization.dogfood.test.ts [in-process]; email-template-two-locales-survive-boot.dogfood.test.ts [http-in-process]; send-template.test.ts [unit] — partial: exact zh-CN reachability and the en-US rung for an unsaved locale (ja-JP) pinned on real stacks; the no-subtag-folding case (zh must NOT get zh-CN) and the reg…
    • a4 · partial · pin send-template.test.ts [unit] — partial: fromOverride and derived text asserted over a fake loader (pins not in ref); replyTo and 'stays absent on the row' unasserted
    • a5 · partial · pin email-template-materialization.dogfood.test.ts [http-in-process]; email-template-overlay-survives-boot.dogfood.test.ts [http-in-process] — partial: overlay-survives-redeploy half asserted on the showcase (PUT /meta, cold restart, GET /meta + send); the declared-source edit served on metadata reload without…
    • a6 · not-run · no pin (no pin found asserting the content→bodyHtml alias prescription or the non-dotted-snake-case name parse error against Em…)
    • a7 · partial · pin anonymous-door-sweep.dogfood.test.ts [http-in-process]; rest.test.ts [unit] — partial: handler unit (mock server/response doubles) asserts 501/200/400 VALIDATION_FAILED; anonymous sweep asserts 401 status per registered route generically (not the…
    • n0 · pass · pin email-template-materialization.dogfood.test.ts [in-process]; email-template-overlay-survives-boot.dogfood.test.ts [http-in-process]
    • n1 · not-run · no pin (no pin asserts the delivered message carries no unresolved { {placeholder} } residue)
    • n2 · not-run · no pin (procedural not-a-FAIL note about the wire vocabulary; no assertion to pin)

    integration-system.external-schema-browser-ui (rev 6) — PARTIAL

    • a0 · not-run · no pin (screenshot oracle; no browser or component pin renders the panel on showcase_external vs a managed datasource or traces…)
    • a1 · not-run · pin stops short (api.ts client reads the envelope over mocked fetch; no rendered table list is compared to the live listing (nothing asserts this clause's DOM))
    • a2 · partial · pin api.test.ts [component] — partial: client-side request shapes (draft POST, PUT /meta/object/:name) asserted over mocked fetch; the persisted object, its binding and the federated /data read are …
    • a3 · partial · pin api.test.ts [component] — partial: client POST refresh-catalog and snapshotAt read asserted over mocked fetch; the header button click and rendered timestamp are not
    • a4 · partial · pin api.test.ts [component] — partial: client reads { ok, results } over mocked fetch; one rendered row per object and the diff-kind labels are not asserted
    • a5 · partial · pin external-datasource-routes-auth-guard.test.ts [unit] — partial: federation handlers captured off a fake server and called directly with a fake auth service (no HTTP adapter), pin not in ref; the PUT /meta/object refusal for…
    • a6 · pass · pin api.test.ts [component]
    • n0 · not-run · no pin (no pin compares rendered rows to the API response)
    • n1 · not-run · no pin (no pin checks /meta after the dialog reports success)
    • n2 · partial · pin external-datasource-routes-auth-guard.test.ts [unit] — partial: no-200 asserted on handlers called directly over fake auth; served stack not driven
    • n3 · not-run · no pin (no pin writes data to an imported federated object)
    • n4 · not-run · no pin (designed-state rendering (loading/error/unavailable/save-first) has no browser or component pin)

    integration-system.external-schema-drift-gate (rev 5) — PARTIAL

    • a0 · partial · pin external-errors.test.ts [unit]; external-validation-plugin.test.ts [unit] — partial: plugin over stubbed services asserts only rejects.toBeInstanceOf(ExternalSchemaMismatchError); the message is pinned as a pure function; no induced-drift boot …
    • a1 · partial · pin external-validation-plugin.test.ts [unit] — partial: unit asserts resolves + a warn containing 'drift'; boot completion (/ready) and the structured diff payload on a real boot unobserved
    • a2 · partial · pin external-validation-plugin.test.ts [unit] — partial: unit asserts no warnings under ignore; no boot log grep
    • a3 · partial · pin external-validation-checkonboot.test.ts [unit] — partial: skip, skip-line payload, per-datasource scope, safe-direction default and rejected spellings all asserted on the plugin over stubbed services; no boot log
    • a4 · pass · pin external-validation-checkonboot.test.ts [unit]
    • a5 · pass · pin list-diagnosed-consumer-sweep.test.ts [unit]
    • a6 · pass · pin external-validation-plugin.test.ts [unit]
    • n0 · partial · pin external-validation-plugin.test.ts [unit] — partial: unit shows the throw; a drifted boot refusing to serve is not observed
    • n1 · partial · pin external-validation-checkonboot.test.ts [unit] — partial: no-abort, skip line and armed watcher asserted at plugin unit; boot log not observed
    • n2 · pass · pin list-diagnosed-consumer-sweep.test.ts [unit]
    • n3 · partial · pin external-errors.test.ts [unit] — partial: message rendering pinned as a pure function/constructor; the plugin's thrown message on a boot is not asserted
    • n4 · pass · pin external-validation-plugin.test.ts [unit]
    • n5 · partial · pin external-validation-plugin.test.ts [unit] — partial: asserts runValidation resolves undefined; the absence of warn/error lines (debug only) is not asserted, and no federation-free boot log read

    integration-system.external-schema-introspection (rev 6) — PARTIAL

    • a0 · partial · pin external-datasource-service.test.ts [unit] — partial: columnCount computed by the service over a fake introspector (not in ref); no pin reads the live showcase_external fixture (customers/orders, columnCount 7)
    • a1 · pass · pin remote-tables-twin.equivalence.test.ts [http-in-process]
    • a2 · partial · pin external-object-draft-authorised-shape.test.ts [unit]; external-object-draft-primary-key.test.ts [unit] — partial: service-level generateObjectDraft pins value import, ObjectSchema.create, no primaryKey, '// Remote primary key:' comment (none in ref); the exact first-line h…
    • a3 · partial · pin remote-tables-twin.equivalence.test.ts [http-in-process] — partial: remote-tables ≡ external/tables twin pinned; the object-draft ≡ external/tables/:remote/draft twin and the shared 400 EXTERNAL_DATASOURCE_ERROR across spelling…
    • a4 · partial · pin remote-tables-twin.equivalence.test.ts [http-in-process] — partial: 401 UNAUTHENTICATED / 403 PERMISSION_DENIED identical on both spellings on a real Hono adapter, but over a fake auth service; the 403 message naming manage_pla…
    • n0 · pass · pin admin-routes.test.ts [http-in-process]
    • n1 · partial · pin remote-tables-twin.equivalence.test.ts [http-in-process] — partial: no-200 to anonymous on both spellings asserted over a fake auth service; served stack not driven
    • n2 · partial · pin admin-routes.test.ts [http-in-process]; envelope.conformance.test.ts [http-in-process] — partial: 400 status (and code) asserted at the route; the message 'Body field "table" is required.' is not asserted
    • n3 · pass · pin remote-tables-twin.equivalence.test.ts [http-in-process]

    integration-system.inbound-mailbox-association (rev 3) — PARTIAL

    • a0 · pass · pin field-mail-association.test.ts [unit]; inline-forward.test.ts [unit]; mail-ingest-service.test.ts [in-process]; mailbox-attachments-kernel.test.ts [in-process]; mailbox-service-kernel.test.ts [in-process]; mailbox-sync-kernel.test.ts [in-process]
    • a1 · partial · pin mail-ingest-service.test.ts [in-process] — partial: contact association and inline-forward association asserted on a real engine after ingest; the rows are never read over GET /api/v1/data/sys_mail_association
    • a2 · partial · pin mailbox-attachments-kernel.test.ts [in-process] — partial: sys_file + sys_attachment rows read through the real engine after a real ingest; not over the data API
    • a3 · pass · pin mail-message-pool-read-gate.dogfood.test.ts [http-in-process]

    integration-system.notification-org-and-redeliver-eligibility (rev 3) — PARTIAL

    • a0 · pass · pin mcp-stdio-cwd.test.ts [unit]; messaging-service.test.ts [unit]; notification-organization-follows-event.integration.test.ts [in-process]; webhook-redeliver-member.test.ts [http-in-process]
    • a1 · partial · pin notification-organization-follows-event.integration.test.ts [in-process] — partial: organization_id on every row asserted at the engine (ObjectQL over SqlDriver); no data-API read and no served-log grep for the warning
    • a2 · partial · pin messaging-service.test.ts [unit] — partial: MessagingService over a fake engine: non-recipient counts 0, no receipt; the served POST /api/v1/notifications/read is not driven
    • a3 · partial · pin webhook-redeliver-member.test.ts [http-in-process] — partial: real Hono canonical app + real MessagingService/MemoryHttpOutbox on a LiteKernel answers 409 DELIVERY_NOT_ELIGIBLE, but identity/session come from a FixturePlu…

    platform-core

    platform-core.activation-ledger-registration-home (rev 7) — PARTIAL

    • a0 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]
    • a1 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]
    • a2 · pass · pin activation-ledger-registration.test.ts [unit]; packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]; plugin.test.ts [unit]
    • a3 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]; plugin.test.ts [unit]
    • a4 · pass · pin platform-object-names.test.ts [unit]
    • n0 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]
    • n1 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]
    • n2 · not-run · no pin (no pin drives a second registrant of sys_metadata_activation (clause says so))
    • n3 · pass · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]; plugin.test.ts [unit]

    platform-core.activation-ledger-row-contract (rev 8) — PARTIAL

    • a0 · not-run · no pin (no pin drives the generic /data door on sys_metadata_activation (200 list, three 405s with the allowed set))
    • a1 · partial · pin action-activation.test.ts [unit]; catalog-activation-door.dogfood.test.ts [http-in-process]; flow-activation-ledger.test.ts [unit] — partial: one-row-per-pair asserted for the store write path and the door; the unique:global index refusal of a hand-inserted duplicate is not pinned
    • a2 · partial · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process] — partial: column-absence half only (row key-set off the real sqlite SELECT); the refused INSERT naming organization_id and its control INSERT are the run's
    • a3 · partial · pin action-activation.test.ts [unit]; catalog-activation-door.dogfood.test.ts [http-in-process]; catalog-activation-door.test.ts [unit]; flow-activation-ledger.test.ts [unit]; packaged-activation-ledger-reach.dogfood.test.ts [http-in-process] — partial: update-not-delete pinned for action+permission+position at HTTP (position: one row after off-then-on, active not read), position also at handler unit, flow at …
    • a4 · partial · pin catalog-activation-door.dogfood.test.ts [http-in-process]; catalog-activation-door.test.ts [unit] — partial: door refusal half only (capability 400 at HTTP without a row-count check; anchors 400 + nothing written at handler unit); the distinct-metadata_type scope wall…
    • a5 · partial · pin action-activation.test.ts [unit]; flow-activation-ledger.test.ts [unit] — partial: absence-reads-active and cross-boot hydration asserted over fakes; the no-lifecycle restart byte-identity diff and the webhook isActive fallback are not pinned
    • n0 · not-run · no pin (no pin writes through the generic data API)
    • n1 · partial · pin packaged-activation-ledger-reach.dogfood.test.ts [http-in-process] — partial: the key-set assertion off the real sqlite driver would red on a resurrected column, but it reads an in-process :memory: boot rather than the run's served DB sc…
    • n2 · pass · pin catalog-activation-door.dogfood.test.ts [http-in-process]; packaged-activation-ledger-reach.dogfood.test.ts [http-in-process]
    • n3 · not-run · no pin (no pin hand-inserts a duplicate against the unique index)
    • n4 · not-run · no pin (procedural checklist-maintenance rule)
    • n5 · partial · pin catalog-activation-door.dogfood.test.ts [http-in-process]; catalog-activation-door.test.ts [unit] — partial: capability 400 at HTTP but no ledger re-read there; nothing-written and the anchors only at handler unit over a fake engine

    platform-core.interrupted-migration-boot-report (rev 3) — PARTIAL

    • a0 · partial · pin migration-recovery-plugin.test.ts [unit] — partial: warning content asserted over a fake ctx/engine; the second served boot's log is the missing layer
    • a1 · partial · pin migration-recovery-plugin.test.ts [unit] — partial: no-write asserted (insert not called) on a fake engine only; health/ready 200 and the sqlite row-count diff are missing
    • a2 · partial · pin migration-recovery-plugin.test.ts [unit] — partial: silence on concluded runs asserted over fakes; the three-boot log comparison on one DB is missing
    • a3 · pass · pin migration-recovery-plugin.test.ts [unit]
    • a4 · pass · pin migration-recovery-plugin.test.ts [unit]
    • n0 · partial · pin migration-recovery-plugin.test.ts [unit] — partial: fake engine insert spy only; the real journal byte-identity on a live boot is missing
    • n1 · pass · pin migration-recovery-plugin.test.ts [unit]
    • n2 · not-run · no pin (procedural absence-inference scoring rule)

    platform-core.lifecycle-retention-sweep (rev 7) — PARTIAL

    • a0 · partial · pin lifecycle-service.test.ts [unit] — partial: reap-by-maxAge under system context and timer arming asserted over a fake engine; the live sweep line and before/after row reads are missing
    • a1 · partial · pin lifecycle-service.test.ts [unit] — partial: onlyWhen predicate reaching the delete filter / candidate read asserted on a fake engine; real paused/running rows surviving a sweep is missing
    • a2 · partial · pin lifecycle-service.test.ts [unit] — partial: pinned half (archive-pending skip, success path) green at unit; the live half (100d sys_audit_log row survives the stock sweep) is the run's
    • a3 · pass · pin lifecycle-service.test.ts [unit]
    • a4 · partial · pin lifecycle-service.test.ts [unit] — partial: kill switch asserted at unit; the bracketed armed/disarmed live boots are missing
    • a5 · not-run · no pin (build oracle is a read of object.zod.ts and engine.ts; the enumSource ratchet is check:platform-checklist, not a test p…)
    • n0 · partial · pin lifecycle-service.test.ts [unit] — partial: predicate-level only over a fake engine
    • n1 · partial · pin lifecycle-service.test.ts [unit] — partial: never-hot-delete-unarchived asserted at unit; the live retained audit row is missing
    • n2 · not-run · no pin (procedural eventual-consistency / absence-inference rule)
    • n3 · not-run · no pin (no pin asserts the log output (cases assert report.swept entries, not logger lines))
    • n4 · not-run · no pin (procedural fixture rule)

    platform-core.metadata-authoring-roundtrip (rev 6) — PARTIAL

    • a0 · not-run · no pin (no pin drives PUT /meta/view/:name or GET /meta/_drafts)
    • a1 · not-run · no pin (no pin publishes drafts or reads /published; the dogfood lifecycle case calls protocol in-process, not the doors)
    • a2 · pass · pin studio-record-page.spec.ts [browser]
    • a3 · partial · pin package-first-authoring.dogfood.test.ts [in-process] — partial: refusal asserted at protocol.saveMetaItem on a booted CRM kernel (no HTTP door); the PUT door's answer is missing
    • a4 · not-run · no pin (no pin drives an overlay write)
    • a5 · not-run · no pin (no pin sends a malformed body)
    • n0 · partial · pin package-first-authoring.dogfood.test.ts [in-process] — partial: only the read-only-package half, and only at the protocol layer; the locked-overlay half has no pin
    • n1 · not-run · no pin (no malformed-body pin)
    • n2 · not-run · no pin (no pin reloads the console after publish)

    platform-core.metadata-registry-serving (rev 3) — PARTIAL

    • a0 · partial · pin meta-types-create-seed.dogfood.test.ts [http-in-process] — partial: GET /meta 200 + equal to /meta/types whose beforeAll asserts entries.length›0; only dashboard/action/report presence checked, not the steps[1] registry presenc…
    • a1 · pass · pin meta-types-create-seed.dogfood.test.ts [http-in-process]
    • a2 · pass · pin meta-types-create-seed.dogfood.test.ts [http-in-process]
    • a3 · not-run · no pin (no pin reads /meta/view/showcase_task)
    • a4 · not-run · no pin (no pin lists /meta/view)
    • a5 · not-run · no pin (no pin reads /meta/object/showcase_account)
    • a6 · not-run · no pin (no pin writes the overlay fields)
    • n0 · partial · pin meta-types-create-seed.dogfood.test.ts [http-in-process] — partial: registry contract (seed) asserted for seeded types, but missing-type detection covers only dashboard/action/report — the seed loop skips types absent from entr…
    • n1 · not-run · no pin (no pin touches the account extension)
    • n2 · not-run · no pin (no unauthenticated probe in the pin)

    platform-core.nav-surfaces-render (rev 7) — PARTIAL

    • a0 · pass · pin showcase-smoke.spec.ts [browser]
    • a1 · not-run · no pin (no pin reads meta/app or diffs it against SURFACES; the suite only drives its own list (ref says so))
    • a2 · not-run · no pin (no bad-route case in the spec)
    • a3 · not-run · no pin (no ErrorBoundary case; no stock fixture throws in a route (knownGaps))
    • n0 · pass · pin showcase-smoke.spec.ts [browser]
    • n1 · pass · pin showcase-smoke.spec.ts [browser]
    • n2 · not-run · no pin (no bad-route case in the spec)
    • n3 · pass · pin showcase-smoke.spec.ts [browser]

    platform-core.protocol-18-handshake-and-stored-replay (rev 2) — PARTIAL

    • a0 · pass · pin migrate-meta-protocol-range.test.ts [unit]; packages-install-protocol-incompatible.test.ts [unit]; plugin-artifact-forward-conversion-major-step.test.ts [unit]; protocol.stored-migration.test.ts [unit]; stored.test.ts [unit]
    • a1 · partial · pin packages-install-protocol-incompatible.test.ts [unit] — partial: HttpDispatcher.handlePackages over a fake kernel; the booted door's answer is missing
    • a2 · partial · pin stored.test.ts [unit] — partial: serving-half replay unit-tested only; the GET of a planted row and the PUT-old-shape 422 tombstone half have no pin
    • a3 · partial · pin plugin-artifact-forward-conversion-major-step.test.ts [unit] — partial: warn read off a mocked logger; a real artifact boot log is missing

    platform-core.serve-composition-v18 (rev 3) — PASS

    • a0 · pass · pin console.not-built.test.ts [http-in-process]; datasource-mapping-before-schema-sync.test.ts [in-process]; serve-config-boot-residual.integration.test.ts [live-boot]; serve-datasource-mapping-before-sync.integration.test.ts [live-boot]; serve-no-storage-boot-guard.integration.test.ts [live-boot]; serve-organization-record-page.e2e.test.ts [live-boot]
    • a1 · pass · pin serve-config-boot-residual.integration.test.ts [live-boot]
    • a2 · pass · pin serve-organization-record-page.e2e.test.ts [live-boot]
    • a3 · pass · pin datasource-mapping-before-schema-sync.test.ts [in-process]; serve-datasource-mapping-before-sync.integration.test.ts [live-boot]
    • a4 · pass · pin serve-no-storage-boot-guard.integration.test.ts [live-boot]
    • a5 · pass · pin console.not-built.test.ts [http-in-process]

    platform-core.settings-audit-secret-fingerprint (rev 4) — PARTIAL

    • a0 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: keyed shape on both ledgers + no plaintext asserted over stub audit sinks; the ledger rows read back over the API are missing
    • a1 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: unit asserts not equal to provider.digest / sha256 of the value; the offline FNV-1a/SHA-256 search over API-read rows with its positive control is missing
    • a2 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: equality/difference asserted at service layer only
    • a3 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: reset newHash null asserted at service layer; API-read reset rows (and the config_change new_value null) missing
    • a4 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: non-secret fnv32 asserted at service layer; API-read control rows missing
    • a5 · pass · pin settings-audit-secret-digest.test.ts [unit]
    • n0 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: no-unkeyed-digest asserted at service layer only
    • n1 · partial · pin settings-audit-secret-digest.test.ts [unit] — partial: JSON.stringify of both stub ledgers not containing the value asserted at service layer only
    • n2 · pass · pin settings-audit-secret-digest.test.ts [unit]
    • n3 · pass · pin settings-audit-secret-digest.test.ts [unit]
    • n4 · not-run · no pin (procedural scoring rule for a1)

    platform-core.settings-organization-isolation-and-platform-rung (rev 5) — PARTIAL

    • a0 · pass · pin config-change-audit.test.ts [in-process]; settings-admission-tenancy-posture.test.ts [in-process]; settings-organization-isolation.pin.test.ts [in-process]; settings-read-door.pin.test.ts [in-process]
    • a1 · partial · pin config-change-audit.test.ts [in-process]; settings-read-door.pin.test.ts [in-process] — partial: global write lands with no scoped sys_setting row and the read door withholds rows from a non-holder, both at engine level (route handlers / engine.find, no HT…
    • a2 · partial · pin settings-organization-isolation.pin.test.ts [in-process] — partial: two-org isolation and lock non-bleed asserted on SettingsService over a real ObjectQL engine; the walled HTTP reads are missing
    • a3 · partial · pin settings-organization-isolation.pin.test.ts [in-process] — partial: SETTINGS_VALIDATION refusal and the single control asserted at the service layer; the walled door's HTTP 400 is missing

    platform-core.url-overlay-contract (rev 3) — PASS

    • a0 · pass · LIVE L4: pass — Drawer: showcase_category list, click row 'Operations' -› ?recordId=-UN91gFDJ8m9a-Q5, history.length 4-›5, drawer dialog shown; Back -› /showcase_category, dialogs 0, list intact. Form new: showcase_task 新建 -› ?form=new, history 4-›5, dialog 新建任务; Back -› list, dialogs 0. Form edit: row 更多操作 › 编辑 -…
    • a1 · pass · LIVE L4: pass — On /showcase_project/record/VuR_s94V7CHQa56F (pushed from the list, history 5): 4 tab switches ?tab=tasks/related/details/tasks kept history.length 5; Ctrl+K -› &palette=1 (dialog) and Shift+? -› &shortcuts=1 (dialog), each closed with Esc, history still 5; ONE Back -› /showcase_project list, dialo…
    • a2 · pass · LIVE L4: pass — Fresh context, direct goto /showcase_project/record/VuR_s94V7CHQa56F?tab=related -› tab 相关 aria-selected=true (详情/任务 false), related Tasks list shown (screenshot)
    • a3 · pass · LIVE L4: pass — Project Data Platform 相关 tab › Tasks 新建 -› URL ?tab=related&form=new&formObject=showcase_task&formLink=project:VuR_s94V7CHQa56F (history 4-›5); overlay 新建任务 with 项目 = 'Data Platform'; page.reload() of the same URL -› overlay re-opens with 项目 = 'Data Platform' (screenshot)
    • a4 · pass · LIVE L4: pass — Contoso account › Projects tab › Data Platform -› URL from=[{o:showcase_account,i:csUDda0vQfgyHi0Q,t:Contoso}], inline back link 'Contoso'; › 相关 › Warehouse schema -› from=[Contoso, Data Platform], inline '‹ Data Platform' above body. Cold load of that URL in a fresh context shows the same link; cl…
    • a5 · pass · LIVE L4: pass — /_console/forms/showcase_task.form?recordId=5XkW9EggKH3gZJaX&recordObject=showcase_project and ?recordId=‹projectId›&recordObject=showcase_project -› error text 'This form edits showcase_task, but the link says record … belongs to showcase_project. Refusing to open it', 0 form inputs, /data/ trace … pin FormPage.recordObject.test.tsx [component] — partial: fail-closed matrix asserted over a stubbed
    • n0 · pass · LIVE L4: pass — 4 tab switches + Ctrl+K palette + Shift+? shortcuts (each opened and closed) kept history.length at 5; one Back left the record for the /showcase_project list, with no tab state replayed and no palette reopened
    • n1 · pass · LIVE L4: pass — Mismatch URLs (a task id or a project id with recordObject=showcase_project; case variants Showcase_Task / SHOWCASE_TASK) issued zero /data/showcase_task or /data/showcase_project requests and no write — only shell chrome GETs (sys_user_preference, sys_inbox_message, sys_notification_receipt); erro… pin FormPage.recordObject.test.tsx [component] — partial: no /data request and no submit asserted at
    • n2 · pass · LIVE L4: pass — No page-scoped reuse of a reserved name on any surface driven: every URL observed (list, view route, drawer, record page, form overlay, child create, drill trail, /forms) used recordId/form/formObject/formLink/tab/palette/shortcuts/from only in their registry meanings. Scope: surfaces driven this r…
    • n3 · pass · LIVE L4: pass — Cold loads reproduced URL state: page.reload of ?form=new&formObject=showcase_task&formLink=project:VuR_… reopened the overlay with 项目=Data Platform; direct goto ?form=‹contactId› opened the 编辑联系人 overlay; direct ?recordId=‹unknown› opened the drawer (未找到记录); direct ?palette=1 / ?shortcuts=1 opened… pin useUrlOverlay.test.tsx [component] — partial: deep-link open of a URL overlay param asserted at h

    platform-core.v18-boot-refusals (rev 7) — PARTIAL

    • a0 · pass · pin authz-identity-objects-boot-refusal.test.ts [in-process]; organization-ownership-boot-guard.kernel.test.ts [in-process]; organization-ownership-boot-guard.test.ts [unit]
    • a1 · partial · pin organization-ownership-boot-guard.kernel.test.ts [in-process]; organization-ownership-boot-guard.test.ts [unit] — partial: refusal code/tables/command asserted on a real kernel over a better-sqlite3 file; the served os serve exit 1, no-listening line and printed message wording a…
    • a2 · partial · pin organization-ownership-boot-guard.kernel.test.ts [in-process] — partial: no seed / Default Organization in the refused file asserted in-process; the full per-table row diff of the v17 copy and the sys_migration marker read are missi…
    • a3 · partial · pin authz-identity-objects-boot-refusal.test.ts [in-process] — partial: refusal naming createIdentityObjectsPlugin() asserted on a real in-process kernel; the clause permits resting on the pin but the boot-log layer is not reached …
    • n0 · partial · pin organization-ownership-boot-guard.kernel.test.ts [in-process] — partial: in-process kernel refusal only; a served v18 boot over the v17 copy is missing

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Per-clause detail, part 3/3 — areas: identity-auth, studio-authoring, i18n, dashboards, search. One line per clause: aK = acceptance[K], nK = negative[K]; verdict; evidence. pin FILE [layer] = the passing pin(s) that assert it (all named pins passed on 756220c); partial: names the layer or half the pin does not reach; LIVE Ln: = the live-leg oracle line from that runner's boot, which decides the clause.

    identity-auth

    identity-auth.admin-lifecycle-operations (rev 10) — PARTIAL

    • a0 · partial · pin admin-platform-admin-standing.dogfood.test.ts [http-in-process] — partial: stored half pinned (ban-user 200, sys_user.banned + ban_reason, unban clears); the banned user's refused sign-in and the post-unban sign-in are not attempted
    • a1 · pass · pin admin-credential-lifecycle.dogfood.test.ts [http-in-process]
    • a2 · pass · pin admin-credential-lifecycle.dogfood.test.ts [http-in-process]
    • a3 · pass · pin admin-platform-admin-standing.dogfood.test.ts [http-in-process]
    • a4 · partial · pin admin-platform-admin-standing.dogfood.test.ts [http-in-process] — partial: refusal status+code pinned; the target's protected request after the refused revoke is never sent
    • a5 · partial · pin admin-platform-admin-standing.dogfood.test.ts [http-in-process]; security-plugin.test.ts [unit] — partial: remove-user 403 + target row survives pinned at HTTP, owned-row read not; the 属主守卫与级联 set_null 冲突:非特权删除 sys_user 时 owner_id 级联置空被 #3004 守卫拦截(级联中途失败) #3023 exemption half is a plugin-security unit over stubs, no engine/HTTP door ex…
    • a6 · partial · pin admin-platform-admin-standing.dogfood.test.ts [http-in-process] — partial: impersonate-user 200 and sys_session.impersonated_by = admin pinned; stop-impersonating and the admin session restore are not driven
    • a7 · not-run · no pin (screenshot oracle; no browser pin)
    • a8 · pass · pin admin-identity-audit-trail.dogfood.test.ts [http-in-process]
    • a9 · partial · pin admin-credential-lifecycle.dogfood.test.ts [http-in-process]; admin-route-nonadmin-refusal.dogfood.test.ts [http-in-process] — partial: refusal half pinned over all 31 derived routes; the unchanged-state read-back is pinned only for create-user and set-user-password
    • a10 · pass · pin create-user-organization-join.dogfood.test.ts [http-in-process]
    • a11 · pass · pin create-user-organization-join.dogfood.test.ts [http-in-process]
    • a12 · partial · pin admin-user-endpoints.test.ts [unit] — partial: runAdminCreateUser at plugin unit; no invite-only walled boot door
    • n0 · pass · pin admin-route-nonadmin-refusal.dogfood.test.ts [http-in-process]
    • n1 · not-run · no pin (no pin attempts sign-in by a banned user)
    • n2 · not-run · pin stops short (moot while revoke-user-sessions is ruled 403; only the refusal is pinned, the live-kill contract has no route to drive)
    • n3 · partial · pin admin-credential-lifecycle.dogfood.test.ts [http-in-process]; security-plugin.test.ts [unit] — partial: auth: create-user 400s when a password is typed while generatePassword keeps its default (true) #3031 half pinned at HTTP; 属主守卫与级联 set_null 冲突:非特权删除 sys_user 时 owner_id 级联置空被 #3004 守卫拦截(级联中途失败) #3023 half only at the plugin-security unit (no engine, no door)

    identity-auth.api-key-expiry-lifecycle (rev 2) — PARTIAL

    • a0 · pass · pin api-key-lifecycle.dogfood.test.ts [http-in-process]; api-key-lifecycle.pin.test.ts [unit]; rest-api-key-lifecycle.pin.test.ts [unit]
    • a1 · pass · pin api-key-lifecycle.dogfood.test.ts [http-in-process]
    • a2 · partial · pin api-key-lifecycle.dogfood.test.ts [http-in-process]; api-key-lifecycle.pin.test.ts [unit] — partial: 400 API_KEY_EXPIRY_TOO_LONG asserted at HTTP; the no-key-minted half only over a fake objectql
    • a3 · partial · pin api-key-lifecycle.pin.test.ts [unit]; rest-api-key-lifecycle.pin.test.ts [unit] — partial: three distinct 403 codes asserted over an HTTP stub + fake ql (REST) and fake kernel (dispatcher); no booted call with a revoked/expired key

    identity-auth.auth-gate-held-session-raw-host-families (rev 3) — PARTIAL

    • a0 · pass · pin admin-routes-auth-gate.pin.test.ts [unit]; api-key-account-posture.test.ts [unit]; cloud-connection-auth-gate.pin.test.ts [unit]; held-session-vendor-admin-doors.pin.test.ts [http-in-process]; http-dispatcher.api-key-account-posture.pin.test.ts [unit]; http-dispatcher.auth-gate-outage.pin.test.ts [unit]; rest-api-key-account-posture.pin.test.ts [unit]; settings-routes.auth-gate.pin.test.ts [unit]; share-link-rout
    • a1 · partial · pin admin-routes-auth-gate.pin.test.ts [unit]; cloud-connection-auth-gate.pin.test.ts [unit]; settings-routes.auth-gate.pin.test.ts [unit]; share-link-routes.auth-gate.pin.test.ts [unit]; storage-routes.auth-gate.pin.test.ts [unit]; webhook-redeliver-auth-gate.pin.test.ts [unit] — partial: each family's gate code and un-held control are asserted on the plugin's registered handlers / its own Hono mount with fake reque
    • a2 · partial · pin held-session-vendor-admin-doors.pin.test.ts [http-in-process] — partial: PASSWORD_RESET_REQUIRED is armed by a system write + noteMustChangePasswordIssued(), not through POST /admin/set-user-password
    • a3 · partial · pin http-dispatcher.api-key-account-posture.pin.test.ts [unit]; rest-api-key-account-posture.pin.test.ts [in-process] — partial: RestServer.enforceAuth with hand-built req/res and a fake auth, HttpDispatcher with fakes; no HTTP x-api-key call
    • n0 · partial · pin cloud-connection-auth-gate.pin.test.ts [unit]; settings-routes.auth-gate.pin.test.ts [unit] — partial: un-held controls and anonymous 401 asserted at handler level only

    identity-auth.auth-method-matrix (rev 9) — PARTIAL

    • a0 · not-run · no pin (no pin compares /auth/config advertisement against on/off boots per variant)
    • a1 · not-run · no pin (no cited pin drives the sign-in / get-session / sign-out sequence)
    • a2 · not-run · no pin (no pin for phone+password sign-in)
    • a3 · partial · pin phone-otp-no-sms-service-refusal.test.ts [unit] — partial: AuthManager.handleRequest over a memory engine asserts 400 SMS_SERVICE_REQUIRED; no NODE_ENV=production server door and the features.phoneNumberOtp non-adverti…
    • a4 · not-run · no pin (login screenshot per boot; no browser pin)
    • a5 · not-run · no pin (no pin forges a disabled method's endpoint)
    • a6 · partial · pin two-factor-lockout.dogfood.test.ts [http-in-process] — partial: sign-in answers twoFactorRedirect:true with a two-factor cookie and verify-totp completes (in-process HTTP); "get-session before completing returns no user" is…
    • a7 · pass · pin oidc-authorization-code-flow.dogfood.test.ts [http-in-process]
    • a8 · not-run · no pin (no pin reads /.well-known discovery documents)
    • a9 · partial · pin change-email-delete-user-wiring.test.ts [unit] — partial: authed change-email 200 / anonymous 401 and delete-user authed 404 / anonymous 401 / callback 404 asserted on AuthManager.handleRequest over a MemoryEngine; no…
    • n0 · not-run · no pin (no pin forges disabled-method endpoints)
    • n1 · partial · pin phone-otp-no-sms-service-refusal.test.ts [unit] — partial: loud 400 (not 2xx/500) asserted at AuthManager unit layer only
    • n2 · not-run · no pin (procedural verdict rule (magic-link/passkeys browser lane is blocked by objectui#4179); nothing to pin)
    • n3 · not-run · no pin (no cited pin reads /auth/config for magicLink/passkeys)
    • n4 · not-run · no pin (no pin for discovery-document base consistency)

    identity-auth.cookie-session-renewal-in-process (rev 2) — PARTIAL

    • a0 · pass · pin in-process-session-read.pin.test.ts [unit]; in-process-session-renewal.pin.test.ts [http-in-process]
    • a1 · partial · pin in-process-session-read.pin.test.ts [unit]; in-process-session-renewal.pin.test.ts [http-in-process] — partial: data-read leg asserted on a real kernel + Hono app (in-process HTTP, own pin object not showcase_task); the meta-read leg (GET /meta/object/:name) has no door …
    • a2 · pass · pin in-process-session-renewal.pin.test.ts [http-in-process]

    identity-auth.default-organization-boot-invariant (rev 3) — PARTIAL

    • a0 · pass · pin ensure-default-organization.test.ts [unit]; identity-objects-default-organization.pin.test.ts [in-process]
    • a1 · partial · pin identity-objects-default-organization.pin.test.ts [in-process] — partial: reduced in-process kernel (ObjectKernel + ObjectQLPlugin, no AuthPlugin) asserts the org precedes the first SEED row; ordering against the first sign-up and th…
    • a2 · partial · pin ensure-default-organization.test.ts [unit] — partial: owner bind of the admin asserted over a fake driver; the second user as member and both sessions' activeOrganizationId are not
    • a3 · partial · pin identity-objects-default-organization.pin.test.ts [in-process] — partial: stamping asserted on the pin's own tenant-scoped object in a reduced kernel; not sys_business_unit and not over HTTP
    • n0 · partial · pin identity-objects-default-organization.pin.test.ts [in-process] — partial: non-NULL stamping asserted in-process on a test object only

    identity-auth.implicit-account-linking-ownership (rev 4) — PARTIAL

    • a0 · partial · pin implicit-account-linking.test.ts [unit] — partial: AuthManager.handleRequest over a hand-rolled in-memory engine asserts account_not_linked, no sys_account row, no verify flip; no booted server or admin read
    • a1 · partial · pin implicit-account-linking.test.ts [unit] — partial: verified-row link + sign-in asserted at unit (fake engine)
    • a2 · partial · pin implicit-account-linking.test.ts [unit] — partial: unlink-then-refuse asserted at unit (fake engine)
    • a3 · partial · pin implicit-account-linking.test.ts [unit] — partial: both explicit-link halves asserted at unit (fake engine)
    • a4 · pass · pin implicit-account-linking.test.ts [unit]
    • n0 · partial · pin implicit-account-linking.test.ts [unit] — partial: no-row / not-signed-in asserted at unit only
    • n1 · partial · pin implicit-account-linking.test.ts [unit] — partial: no verify flip asserted at unit only
    • n2 · partial · pin implicit-account-linking.test.ts [unit] — partial: asserted at unit only
    • n3 · partial · pin implicit-account-linking.test.ts [unit] — partial: asserted at unit only
    • n4 · pass · pin implicit-account-linking.test.ts [unit]
    • n5 · not-run · no pin (procedural rule about the fixture IdP's email_verified claim)
    • n6 · not-run · no pin (procedural rule (fresh context per implicit sign-in))

    identity-auth.import-invitation-and-sso-domain-answers (rev 2) — PARTIAL

    • a0 · pass · pin admin-import-users-account-invitation.test.ts [unit]; admin-import-users-invite-link.test.ts [unit]; auth-account-invitation-template.test.ts [unit]; sso-domain-verification-unknown-provider.pin.test.ts [unit]
    • a1 · pass · pin admin-import-users-account-invitation.test.ts [http-in-process]; auth-account-invitation-template.test.ts [unit]
    • a2 · pass · pin admin-import-users-invite-link.test.ts [http-in-process]
    • a3 · partial · pin sso-domain-verification-unknown-provider.pin.test.ts [unit] — partial: real AuthPlugin on Hono over createMemoryEngine; no booted server per flag

    identity-auth.invitation-scope-gates (rev 6) — PARTIAL

    • a0 · partial · pin delegated-admin-invite.dogfood.test.ts [http-in-process] — partial: POST /auth/organization/invite-member 200 and one sys_invitation row with role member asserted; status pending not asserted (half)
    • a1 · pass · pin delegated-admin-invite.dogfood.test.ts [http-in-process]
    • a2 · pass · pin delegated-admin-invite.dogfood.test.ts [http-in-process]
    • a3 · pass · pin delegated-admin-invite.dogfood.test.ts [http-in-process]
    • a4 · not-run · no pin (screenshot oracle; no browser pin)
    • a5 · not-run · no pin (no pin drives cancel/resend or checks InvitationStatus vocabulary)
    • a6 · not-run · no pin (no pin reads /security/my-delegable-scope)
    • n0 · pass · pin delegated-admin-invite.dogfood.test.ts [http-in-process]
    • n1 · partial · pin delegated-admin-invite.dogfood.test.ts [http-in-process] — partial: server-denial half pinned (403, no row); the affordance-hidden half is browser-lane (a4) and unpinned
    • n2 · not-run · no pin (no pin compares delegable scope against what the caller can delegate)

    studio-authoring

    studio-authoring.expression-editors (rev 5) — PARTIAL

    • a0 · partial · pin CelPredicateField.test.tsx [component]; celAuthoring.test.ts [component] — partial: jsdom component render with the real @objectstack/formula engine shows Number / Unknown + hint; screenshot oracle in the live Studio not driven
    • a1 · not-run · no pin (no pin saves a formula and reads Field.returnType back via /meta, nor checks the formulaEdited guard)
    • a2 · partial · pin celAuthoring.test.ts [component] — partial: editor-side tiers asserted with the real engine package in jsdom; the engine/build verdicts (validate_expression, rls-predicate-unenforceable at publish) are n…
    • a3 · partial · pin CelPredicateField.test.tsx [component]; celAuthoring.test.ts [component] — partial: completion and bare-ref error asserted in jsdom; the live DOM listbox and the current_user. suppression in the browser are not
    • a4 · partial · pin CelPredicateField.test.tsx [component]; PermissionAdvancedFacets.cel.test.tsx [component] — partial: error tier and celErrorCount reported up in jsdom; the host Save disabled / perm-autosave-held with no PUT is not driven
    • a5 · partial · pin CelTestRunDialog.test.tsx [component] — partial: allow/deny/value outcomes asserted in jsdom with the real engine; live dialog screenshots and comparison to a direct engine evaluate not driven
    • a6 · not-run · no pin (no pin builds the editor-vs-engine parity table against validate_expression / build verdicts)
    • a7 · pass · pin celAuthoring.test.ts [component]
    • n0 · not-run · no pin (no editor-vs-engine comparison is pinned)
    • n1 · partial · pin PermissionAdvancedFacets.cel.test.tsx [component] — partial: facets report errors up; the host's Save gate on celErrorCount is not driven
    • n2 · partial · pin CelPredicateField.test.tsx [component]; celAuthoring.test.ts [component] — partial: asserted in jsdom only

    studio-authoring.meta-save-preconditions-and-draft-rows (rev 2) — PARTIAL

    • a0 · pass · pin meta-draft-head-package-inheritance.test.ts [in-process]; meta-item-version-token-occ.test.ts [in-process]; meta-save-preconditions-parity.test.ts [in-process]; protocol-metadata-row-actor.test.ts [in-process]; sys-metadata-repository-list-drafts.test.ts [unit]
    • a1 · partial · pin meta-item-version-token-occ.test.ts [in-process]; object-designer-field-reorder.dogfood.test.ts [http-in-process] — partial: the full precondition matrix is pinned on a RestServer over createMockServer (no HTTP adapter); only If-Match-with-a-token-saves is seen on a booted stack; sta…
    • a2 · partial · pin sys-metadata-repository-list-drafts.test.ts [unit] — partial: repository over a fake engine projects label from the draft body; GET /meta/_drafts over HTTP not driven
    • a3 · partial · pin protocol-metadata-row-actor.test.ts [in-process] — partial: row actor columns asserted at the protocol/engine; the HTTP history read naming the acting admin is not driven

    studio-authoring.metadata-diagnostics-sweep (rev 9) — PARTIAL

    • a0 · not-run · no pin (no pin reads the live /meta/diagnostics body against GetMetaDiagnosticsResponseSchema / registry-with-schema count)
    • a1 · not-run · no pin (stats vs per-type list and layered-read lock envelopes not pinned)
    • a2 · not-run · no pin (?package= scoping and directory-tile parity not pinned)
    • a3 · partial · pin protocol.diagnostics-store-outage.test.ts [in-process]; rest-server-query-multiplicity.test.ts [unit] — partial: ?type=viewes 400 asserted at the protocol (getMetaDiagnostics) layer; a repeated ?package is refused at the RestServer handler over a mock protocol (not ?sever…
    • a4 · not-run · no pin (severity=warning vs severity=error diff not pinned)
    • a5 · not-run · no pin (no browser pin of the DiagnosticsPage empty state or directory header)
    • a6 · not-run · no pin (planted invalid row + located errors + deep link not pinned)
    • a7 · pass · pin protocol.diagnostics-store-outage.test.ts [in-process]
    • n0 · partial · pin protocol.diagnostics-store-outage.test.ts [in-process] — partial: protocol refuses; the wire answer of GET /meta/diagnostics?type=viewes is not driven
    • n1 · pass · pin protocol.diagnostics-store-outage.test.ts [in-process]
    • n2 · not-run · no pin (page rendering not pinned; absence-inference note)
    • n3 · not-run · no pin (procedural recording rule (dispatcher-vs-hono-route); nothing to pin)
    • n4 · not-run · no pin (procedural scope boundary; nothing to pin)

    studio-authoring.multi-package-item-rows (rev 2) — PARTIAL

    • a0 · pass · pin meta-delete-drop-storage-other-rows.test.ts [in-process]; package-promote-runtime-owner-refusal.integration.test.ts [in-process]; package-revert-stored-members.integration.test.ts [in-process]; package-uninstall-shared-object.integration.test.ts [in-process]; protocol-runtime-owner-overlay-refusal.test.ts [in-process]; protocol-sentinel-owner-package-save-refusal.test.ts [in-process]; protocol.packageless-save-ad
    • a1 · partial · pin protocol.packageless-save-address.test.ts [in-process] — partial: protocol in-process: ambiguous save 409 RESOURCE_CONFLICT and one-holder addressing; no HTTP PUT/DELETE and /layers read
    • a2 · partial · pin protocol-runtime-owner-overlay-refusal.test.ts [in-process]; protocol-sentinel-owner-package-save-refusal.test.ts [in-process] — partial: 422 OBJECT_OVERLAY_PACKAGE_MISMATCH asserted at protocol/engine; no HTTP PUT + read-back
    • a3 · partial · pin protocol.sealed-remedy-kind.test.ts [in-process]; rest-meta-sealed-first-draft-remedy.test.ts [in-process]; showcase-object-extension-scalar-divergence.dogfood.test.ts [http-in-process] — partial: one-sentence message pinned on RestServer handlers in-process; the booted showcase asserts 403 NOT_OVERRIDABLE but not the single sentence naming TYPE/NAME and…
    • a4 · partial · pin package-revert-stored-members.integration.test.ts [in-process] — partial: revert via HttpDispatcher in-process (no HTTP adapter)

    studio-authoring.object-designer-roundtrip (rev 8) — PARTIAL

    • a0 · not-run · no pin (no spec publishes or reads GET /api/v1/meta/object/... back; field set/options/order persistence unpinned)
    • a1 · partial · pin studio-object-designer.spec.ts [browser] — partial: designer half pinned (field-apiname-input = asset_code after blur); the stored record's column key (asset_code, not field_N) is never read
    • a2 · pass · pin studio-object-designer.spec.ts [browser]
    • a3 · partial · pin studio-object-designer.spec.ts [browser] — partial: banner half corroborated with ONE real option (clause judges with three); never publishes, so 'published picklist carries exactly 3 options' is unasserted
    • n0 · partial · pin studio-object-designer.spec.ts [browser] — partial: F3 checks the input value only; the persisted field key is not read

    studio-authoring.org-override-registry-gate (rev 5) — PASS

    • a0 · pass · LIVE L1: pass — PUT /meta/object/showcase_task (label modified) → 403 code NOT_OVERRIDABLE "…provided by a managed package and is sealed…" x2; GET still label Task. Code is upper-case NOT_OVERRIDABLE (clause spells not_overridable) pin overlay-precedence.test.ts [unit]; showcase-object-extension-scalar-divergence.dogfood.test.ts [http-in-process]
    • a1 · pass · LIVE L1: pass — PUT /meta/view/showcase_task.urgent label 'Urgent (QA L1 overlay)' → 200 'Saved customization overlay'; GET serves the overlay label pin managed-content-sealed.dogfood.test.ts [http-in-process]; overlay-precedence.test.ts [unit] — partial: CRM boot accepts the packaged-view overlay PUT 200, but no case reads the overlaid label back (precedence half), and on the CRM app, not showcase
    • a2 · pass · LIVE L1: pass — PUT /meta/job/qa_probe_job → 403 NOT_CREATABLE (code-only, allowRuntimeCreate=false) x2; GET → 404. Variant: PUT /meta/field/showcase_task.qa_l1_field → 403 NOT_CREATABLE pin overlay-precedence.test.ts [unit] — partial: protocol-level overlay gate throws 403 for job; the HTTP PUT /meta/job door is not driven
    • a3 · pass · LIVE L1: pass — same run: PUT /meta/object/qa_org_probe (new) → 200 'Saved object' and GET resolves, while showcase_task overlay PUT → 403 NOT_OVERRIDABLE pin overlay-precedence.test.ts [unit]; showcase-object-extension-scalar-divergence.dogfood.test.ts [http-in-process] — partial: brand-new object accepted only at the unit gate; the refused half is HTTP on the showcase, but no single run pairs a new-name PUT 200 w
    • a4 · pass · LIVE L1: pass — DELETE /meta/view/showcase_task.urgent → 200 {success:true,reset:true,seq:8}; GET label back to 'Urgent'; second DELETE → 200 {success:true,reset:false} (no seq), matches DeleteMetaItemResponseSchema pin email-template-two-locales-survive-boot.dogfood.test.ts [http-in-process]; managed-content-sealed.dogfood.test.ts [http-in-process] — partial: DELETE answers 200 'reset to artifact default' (CRM) an
    • n0 · pass · LIVE L1: pass — boot4: PUT /meta/object/showcase_task label overlay → 403 NOT_OVERRIDABLE; PUT with an added field → 403 NOT_OVERRIDABLE (field not added on GET); PUT /meta/field/showcase_task.title → 403 NOT_OVERRIDABLE; no 200 anywhere pin managed-content-sealed.dogfood.test.ts [http-in-process]; showcase-object-extension-scalar-divergence.dogfood.test.ts [http-in-process]

    studio-authoring.permission-matrix-editor-ux (rev 5) — PASS

    • a0 · pass · LIVE L5: pass — scratch env set qa_l5_perm (PUT /meta/permission, 200) opened at /_console/apps/com.objectstack.studio/metadata/permission/qa_l5_perm; expanded Account (23 fields, filter 'Filter fields…' renders); filter '_r' → counter '3 / 23', DOM carries readable/editable checkboxes for only annual_revenue, chu… pin PermissionMatrixEditor.fieldBulk.test.tsx [component] — partial: jsdom: filtered rows present, hi
    • a1 · pass · LIVE L5: pass — prior overrides website{r,w}, hq{!r}. '_r' Write all → the 3 visible become editable; clearing the filter: only annual_revenue/churn_reason/sales_region editable states changed, website/hq/18 others unchanged. 'sales' Read all → only sales_region editable flipped false. 'churn' Clear → only churn_r… pin PermissionMatrixEditor.fieldBulk.test.tsx [component] — partial: filter → Read all → clear filter
    • a2 · pass · LIVE L5: pass — Save → PUT /meta/permission/qa_l5_perm → 200; GET fields = {showcase_account.website:{r:true,e:true}, showcase_account.hq:{r:false,e:false}, showcase_account.annual_revenue:{r:true,e:true}, showcase_account.sales_region:{r:true,e:false}} — bulk-touched keys ⊆ fields visible at bulk time; no filter-…
    • a3 · pass · LIVE L5: pass — churn_reason was explicitly Write-all'd then Cleared → saved fields map has NO showcase_account.churn_reason key (not an explicit default row); UI shows it readable, not editable pin PermissionMatrixEditor.fieldBulk.test.tsx [component] — partial: Clear repaints readable/not-editable in jsdom; that the saved fields map omits the keys is unasserted
    • a4 · pass · LIVE L5: pass — viewport 820×900: Bulk ‹th›'s table width 1248 inside div.flex-1.overflow-auto (overflow-x:auto) scrollWidth 1248 › clientWidth 772, document scrollWidth 820 (no page scroll); scrollLeft→476 then R/CRUD/All/None at x 667–812 within container right 820; screenshot shows full Bulk column. NOTE: table…
    • a5 · pass · LIVE L5: pass — artifact gate: metadata admin /permission/showcase_contributor → badge 'Read-only (this set is provided by a code package)', Save absent, 432 bulk buttons all disabled, 756–806 checkboxes all disabled (also inside an expanded field sub-table; field bulk buttons not rendered). Package gate: /_consol… pin PermissionMatrixEditor.artifactTier.test.tsx [component]; PermissionMatrixEditor.readonly.test.ts
    • n0 · pass · LIVE L5: pass — saved fields map (a2) carries no key for any filter-hidden field across three bulks
    • n1 · pass · LIVE L5: pass — at 820px the container scrolls (scrollWidth 1248 › clientWidth 772) and the Bulk column is reachable (a4)

    studio-authoring.record-page-roundtrip (rev 9) — PARTIAL

    • a0 · pass · pin studio-record-page.spec.ts [browser]
    • a1 · pass · pin studio-editor.spec.ts [browser]
    • a2 · not-run · no pin (neither spec publishes and reads GET /api/v1/meta/page/‹name› back)
    • a3 · not-run · no pin (no spec opens a record as an end user after publish)
    • n0 · pass · pin studio-record-page.spec.ts [browser]

    studio-authoring.save-door-runs-authoring-rules (rev 3) — PARTIAL

    • a0 · pass · pin default-record-page-save-door.test.ts [in-process]; meta-view-chart-binding.test.ts [in-process]; page-slot-pair.test.ts [unit]; protocol.runtime-authoring-gate.test.ts [in-process]; protocol.save-door-lock-family.test.ts [in-process]; protocol.save-door-protection.test.ts [in-process]; runtime-gate.object-option-visibility-writes.test.ts [unit]; validate-component-props-url-target.test.ts [unit]
    • a1 · partial · pin default-record-page-save-door.test.ts [in-process]; protocol.runtime-authoring-gate.test.ts [in-process] — partial: 422 INVALID_METADATA / DEFAULT_RECORD_PAGE_CONFLICT with located paths asserted on saveMetaItem (protocol/objectql, no HTTP); no PUT status + GET read-back ove…
    • a2 · partial · pin protocol.runtime-authoring-gate.test.ts [in-process] — partial: message contains 'titel → title' at the protocol save door; the HTTP body is not read
    • a3 · partial · pin protocol.runtime-authoring-gate.test.ts [in-process] — partial: draft admitted / promotion refused at the protocol; no HTTP ?mode=draft PUT then publish
    • n0 · partial · pin default-record-page-save-door.test.ts [in-process] — partial: 'stores nothing' asserted in-process; no HTTP read-back after a refused PUT

    i18n

    i18n.flow-copy-translation-and-host-override (rev 3) — PARTIAL

    • a0 · pass · pin end-node-refusal-translation.test.ts [in-process]; flow-run-locale.test.ts [unit]; flow-screen-option-key.test.ts [unit]; i18n-flow-refusal-coverage.test.ts [unit]; i18n-flow-screen-coverage.test.ts [unit]; i18n-flow-toast-option-coverage.test.ts [unit]; plugin.translations.test.ts [unit]; translation.test.ts [unit]
    • a1 · partial · pin end-node-refusal-translation.test.ts [in-process]; flow-run-locale.test.ts [unit] — partial: refusal half: real AutomationEngine renders zh-CN with holes filled and no-locale runs keep source text; dispatcher locale forwarding is over a stub automation…
    • a2 · partial · pin i18n-flow-refusal-coverage.test.ts [unit]; i18n-flow-screen-coverage.test.ts [unit]; i18n-flow-toast-option-coverage.test.ts [unit] — partial: extractTranslations (the function) emits refusal/screen/option/toast keys; the CLI command and its bundle-file write are not run
    • a3 · partial · pin translation.test.ts [unit] — partial: schema rule and { { } } remedy asserted at TranslationDataSchema; os validate exit code not run
    • a4 · partial · pin plugin.translations.test.ts [unit] — partial: both load orders asserted on PlatformObjectsPlugin over createMemoryI18n (no engine, no HTTP); the served definition label is not read

    i18n.surface-matrix (rev 10) — FAIL

    • a0 · pass · LIVE L4: pass — Switched via avatar menu › Language › 中文(中国) (PATCH /api/v1/data/sys_user/‹admin› {locale:zh-CN} -› 200; fresh contexts then render zh with no localStorage seed). One screenshot per variant, each showing its pre-identified key in zh: nav apps.showcase_app.navigation (能力地图/工作区/数据模型/任务); list headers…
    • a1 · pass · LIVE L4: pass — GET /api/v1/i18n/translations/zh-CN -› 200, 264,699 B, success:true; key map cited per variant: apps.showcase_app.navigation.nav_capability_map, objects.showcase_task.fields.*.label/options, objects.showcase_task._actions.showcase_mark_done.successMessage, objects.showcase_task._views.urgent.emptyS… pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process] — partial: pin reads the serve
    • a2 · pass · LIVE L4: pass — Untranslated keys derived as declared-but-absent from the served zh tree: showcase_field_zoo fields (list headers render Name/Select/Number/Boolean/Rating, options Low/High), objects.showcase_task.description (header shows 'A unit of work inside a project.'), dashboards.showcase_chart_gallery.label…
    • a3 · pass · LIVE L4: pass — Same stored values render zh in all three named places: list cells (状态 待办/待规划/已完成/进行中/评审中, 优先级 紧急/中/高/低), New/Edit form overlay selects (状态 options 待规划..已完成, 优先级 低/中/高/紧急), list filter value picker for 状态 (待规划/待办/进行中/评审中/已完成). NOTE: a 4th form surface, /_console/forms/showcase_task.form, renders th…
    • a4 · pass · LIVE L4: pass — showcase_task default list header row (screenshot): 标题 项目 负责人 状态 优先级 截止日期 进度 + console chrome 操作 — 100% zh
    • a5 · pass · LIVE L4: pass — Toast half live: record page 标记为完成 -› POST /api/v1/actions/showcase_task/showcase_mark_done {recordId:5XkW9EggKH3gZJaX} -› 200 at t+125ms, toast 任务已标记为完成。 first seen at t+316ms (after the 2xx); server read after: done=true, progress=100. Confirm half pin-only per knownGaps[3] (no showcase action de… pin page-header-action-i18n.test.tsx [component]; record-quick-actions.actionText-i18n.test.tsx [comp
    • a6 · pass · LIVE L4: pass — GET /api/v1/i18n/locales -› 200 {success:true,data:{locales:[{code:en,label:en,isDefault:true},{code:zh-CN,label:zh-CN,isDefault:false}]}} — exactly en + zh-CN, enveloped, not a bare array pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process] — partial: asserts {success:true,data.locales} containing en and zh-CN (arrayContaining), not the exact configured set / no superset
    • a7 · pass · LIVE L4: pass — /translations/zh-CN non-empty; top-level groups = apps,dashboards,datasets,flows,globalActions,messages,metadataForms,objects,pages,permissions,positions,reports,settings,settingsCommon; PlatformTranslationDataSchema (strictObject, packages/spec/dist/system) .safeParse(served tree) -› success:true.… pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process] — partial: asserts the bundle
    • a8 · pass · LIVE L4: pass — GET /api/v1/i18n/labels/showcase_task/zh-CN -› {object:showcase_task,locale:zh-CN,labels:{title:标题,project:项目,assignee:负责人,status:状态(+options),priority:优先级(+options),due_date:截止日期,progress:进度,…}}; the 7 rendered list headers equal labels[title,project,assignee,status,priority,due_date,progress].lab… pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process] — partial: route half: /labels
    • a9 · pass · LIVE L4: pass — GET /i18n/translations/zz-ZZ -› 200 {success:true,data:{locale:zz-ZZ,translations:{}}}; GET /i18n/labels/showcase_task/zz-ZZ -› 200 {success:true,data:{object:showcase_task,locale:zz-ZZ,labels:{}}} — empty maps, no 500, no key dump
    • a10 · pass · LIVE L4: pass — PUT /api/settings/localization {values:{locale:zh-CN}} -› 200 (source tenant); then PATCH showcase_task priority urgent-›high (x2) -› 200; GET sys_activity (no Accept-Language) summary '优先级: 紧急 → 高'; home 活动动态 + sys_activity list screenshot show zh verbs (更新了 任务 "PII access review":进度和已完成). Checkli…
    • n0 · pass · LIVE L4: pass — No raw dotted key anywhere in the session: body-text regex sweep of 17 zh-CN routes (home, task list/urgent view/record/New form, contact, field zoo, chart gallery, command center, sys_user, settings/localization, connect_agent, position/new, Studio, sys_activity, announcement, expense report) for …
    • n1 · fail · LIVE L4: fail — /_console/forms/showcase_task.form?recordId=5XkW9EggKH3gZJaX&recordObject=showcase_task under a zh-CN session: the bundle carries objects.showcase_task.fields.status.options (todo 待办…) and priority.options (high 高…), yet the form's selects render 'To Do' [Backlog/To Do/In Progress/In Review/Done] a…
    • n2 · pass · LIVE L4: pass — GET /api/v1/i18n/locales -› 200 {success:true,data:{locales:[en,zh-CN]}} — enveloped, not a bare array pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process]
    • n3 · pass · LIVE L4: pass — GET /i18n/labels/showcase_task/zh-CN field labels == rendered list header row (标题/项目/负责人/状态/优先级/截止日期/进度); its status/priority option maps == rendered list cells, overlay form selects and the filter picker. The /forms route's English options are scored under n1 (that route does not resolve options a… pin showcase-anonymous-deny-surfaces.dogfood.test.ts [http-in-process] — partial: only the route side

    dashboards

    dashboards.analytics-exposure-gate-and-measure-aggregate (rev 2) — PARTIAL

    • a0 · pass · pin api-exposure-door.test.ts [in-process]; dimension-label-exposure.test.ts [unit]; preview-column-enrichment.test.ts [unit]; unexposed-definition-registration.test.ts [in-process]
    • a1 · partial · pin api-exposure-door.test.ts [in-process]; unexposed-definition-registration.test.ts [in-process] — partial: 404 OBJECT_API_DISABLED and 400 INVALID_FIELD (member + admin) asserted on AnalyticsService over a real ObjectQL/SqlDriver engine, no HTTP; CUBE_NOT_FOUND on q…
    • a2 · partial · pin unexposed-definition-registration.test.ts [in-process] — partial: warn + absence from getMeta asserted in-process on the plugin; the boot log line and GET /api/v1/analytics/meta over HTTP are not
    • a3 · not-run · pin stops short (cited pin asserts preview==live descriptor parity and builtinAggregate, never fields[].aggregate === "count" nor its absence on dimension columns)

    dashboards.dataset-report-authoring (rev 4) — PARTIAL

    • a0 · pass · pin dashboard-designer-roundtrip.dogfood.test.ts [http-in-process]
    • a1 · not-run · pin stops short (read-back asserts envelope, 3 widgets and layout===undefined only; dataset+values present and legacy object/categoryField/valueField/aggregate absent are not a…)
    • a2 · not-run · no pin (screenshot oracle; no browser or component pin renders the published layout-less dashboard)
    • a3 · not-run · no pin (no pin reconciles showcase_hours_by_status rows with a dataset aggregate)
    • a4 · not-run · no pin (no pin for the matrix pivot cells)
    • a5 · not-run · no pin (no pin for joined report block totals or the done:false/done:true partition)
    • a6 · not-run · no pin (screenshot oracle; no pin renders DatasetReportChart)
    • a7 · not-run · no pin (per-variant screenshot set; no browser pin)
    • n0 · not-run · no pin (the ref pin has no nested-joined-block case)
    • n1 · not-run · no pin (the ref pin never publishes a dangling binding)

    dashboards.empty-null-bucket-boundaries (rev 2) — PARTIAL

    • a0 · not-run · no pin (screenshot + console oracle; no browser pin of the empty-window Delivery Operations board)
    • a1 · not-run · no pin (network-trace oracle; no pin observes the dashboard re-query bounds)
    • a2 · not-run · no pin (no pin compares a KPI tile to an aggregate under an empty window)
    • a3 · pass · pin date-bucket-parity-conformance.test.ts [in-process]
    • a4 · pass · pin empty-group-bucket-parity.test.ts [in-process]
    • a5 · not-run · no pin (screenshot + procedural annotation; nothing pinned)
    • n0 · partial · pin date-bucket-parity-conformance.test.ts [in-process] — partial: the SQLite 上 Field.datetime 的 dateGranularity 分桶恒为 NULL —— 趋势图塌成一根柱子 #3773 seam is pinned at the driver layer, but the live trend chart (line_created one point per seeded month) is not observed
    • n1 · not-run · no pin (stale-widget + trace observation needs a browser)

    search

    search.cross-field-object-search (rev 4) — PASS

    • a0 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • a1 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • a2 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • a3 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • a4 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • n0 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • n1 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • n2 · pass · pin showcase-search.dogfood.test.ts [http-in-process]

    search.field-scoped-narrowing (rev 2) — PARTIAL

    • a0 · pass · pin showcase-search.dogfood.test.ts [http-in-process]
    • a1 · partial · pin list-view-grouping-query-door.test.ts [in-process] — partial: 400 INVALID_FIELD for an unscannable searchFields asserted only on a GROUPED query via RestServer called directly over a real SqlDriver (no Hono, not the showc…
    • a2 · not-run · no pin (no pin names __search in searchFields or scans bodies for a __search key)
    • a3 · not-run · no pin (no pin drives the GET $search/$searchFields spelling)
    • n0 · partial · pin list-view-grouping-query-door.test.ts [in-process] — partial: only the grouped-query door is pinned refusing rather than answering unsearched, in-process
    • n1 · partial · pin list-view-grouping-query-door.test.ts [in-process] — partial: same grouped-query case; plain door unpinned

    search.global-search-skips-unreadable (rev 4) — PARTIAL

    • a0 · partial · pin search-skip-unreadable.dogfood.test.ts [http-in-process] — partial: unscoped member search 200, walled name and row id absent from the body text (planted skipsearch_* pair); totalObjects is not asserted on the unscoped case
    • a1 · pass · pin search-skip-unreadable.dogfood.test.ts [http-in-process]
    • a2 · pass · pin search-skip-unreadable.dogfood.test.ts [http-in-process]
    • a3 · not-run · no pin (row scope on a searched object has no pin (security(search): a field-narrowed search still matches through the name field's pinyin companion #21880 case 1))
    • a4 · partial · pin protocol.search-skip-unreadable.test.ts [unit] — partial: the field-narrowing mechanism is pinned at the protocol (searchAll over a stubbed engine/security service); no HTTP read of a term in a hidden sys_user column
    • n0 · pass · pin search-skip-unreadable.dogfood.test.ts [http-in-process]
    • n1 · pass · pin search-skip-unreadable.dogfood.test.ts [http-in-process]
    • n2 · pass · pin search-skip-unreadable.dogfood.test.ts [http-in-process]
    • n3 · not-run · no pin (hidden-field term case not pinned end to end)
    • n4 · partial · pin protocol.search-skip-unreadable.test.ts [unit] — partial: protocol unit asserts the server narrows to queryable fields instead of tripping the predicate guard; no HTTP member search with server-picked fields
    • n5 · not-run · no pin (procedural wrong-persona rule)

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out for this record (checklist-test §5). One FAIL, dispositioned: product defect → extracted. PARTIAL items park their coverage gaps on the wave anchor. The supersede of #25815 for this card's areas is below; #25815 itself is left open here: the wave-2 PM session closes it once both Tier 1 halves are posted.

    Extracted: #26452 · i18n.surface-matrix · n1
    Extracted: #26453 · records-forms.record-discussion-mentions · observed beside the clauses
    Carried-forward: #25815 · records-forms.record-edit-undo · BLOCKED (fixture: no packaged undoable update action in examples/app-showcase; verdict was for rev 3, the item is now rev 4)
    Parked-on: #25807 · dashboards.analytics-exposure-gate-and-measure-aggregate · partial a1, a2 (pin below the oracle layer); no pin for a3
    Parked-on: #25807 · dashboards.dataset-report-authoring · no pin for a1, a2, a3, a4, a5, a6, a7, n0, n1
    Parked-on: #25807 · dashboards.empty-null-bucket-boundaries · partial n0 (pin below the oracle layer); no pin for a0, a1, a2, a5, n1
    Parked-on: #25807 · i18n.flow-copy-translation-and-host-override · partial a1, a2, a3, a4 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.admin-lifecycle-operations · partial a0, a4, a5, a6, a9, a12, n3 (pin below the oracle layer); no pin for a7, n1, n2
    Parked-on: #25807 · identity-auth.api-key-expiry-lifecycle · partial a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.auth-gate-held-session-raw-host-families · partial a1, a2, a3, n0 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.auth-method-matrix · partial a3, a6, a9, n1 (pin below the oracle layer); no pin for a0, a1, a2, a4, a5, a8, n0, n2, n3, n4
    Parked-on: #25807 · identity-auth.cookie-session-renewal-in-process · partial a1 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.default-organization-boot-invariant · partial a1, a2, a3, n0 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.implicit-account-linking-ownership · partial a0, a1, a2, a3, n0, n1, n2, n3 (pin below the oracle layer); no pin for n5, n6
    Parked-on: #25807 · identity-auth.import-invitation-and-sso-domain-answers · partial a3 (pin below the oracle layer)
    Parked-on: #25807 · identity-auth.invitation-scope-gates · partial a0, n1 (pin below the oracle layer); no pin for a4, a5, a6, n2
    Parked-on: #25807 · integration-system.connector-auth-kind-application · partial a0, a1, a2, a3, n1, n2 (pin below the oracle layer); no pin for a4, n0
    Parked-on: #25807 · integration-system.connector-declarative-boot · partial a0, a1, a2, a3, a4, a5, n1 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.connector-stdio-default-deny · partial a0, a1, a2, n0, n1 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.datasource-admin-lifecycle · partial a0, a1, a2, a3, a4, a5, a8, n0, n1, n2, n3 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.email-template-render · partial a0, a1, a2, a3, a4, a5, a7 (pin below the oracle layer); no pin for a6, n1, n2
    Parked-on: #25807 · integration-system.external-schema-browser-ui · partial a2, a3, a4, a5, n2 (pin below the oracle layer); no pin for a0, a1, n0, n1, n3, n4
    Parked-on: #25807 · integration-system.external-schema-drift-gate · partial a0, a1, a2, a3, n0, n1, n3, n5 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.external-schema-introspection · partial a0, a2, a3, a4, n1, n2 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.inbound-mailbox-association · partial a1, a2 (pin below the oracle layer)
    Parked-on: #25807 · integration-system.notification-org-and-redeliver-eligibility · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · platform-core.activation-ledger-registration-home · no pin for n2
    Parked-on: #25807 · platform-core.activation-ledger-row-contract · partial a1, a2, a3, a4, a5, n1, n5 (pin below the oracle layer); no pin for a0, n0, n3, n4
    Parked-on: #25807 · platform-core.interrupted-migration-boot-report · partial a0, a1, a2, n0 (pin below the oracle layer); no pin for n2
    Parked-on: #25807 · platform-core.lifecycle-retention-sweep · partial a0, a1, a2, a4, n0, n1 (pin below the oracle layer); no pin for a5, n2, n3, n4
    Parked-on: #25807 · platform-core.metadata-authoring-roundtrip · partial a3, n0 (pin below the oracle layer); no pin for a0, a1, a4, a5, n1, n2
    Parked-on: #25807 · platform-core.metadata-registry-serving · partial a0, n0 (pin below the oracle layer); no pin for a3, a4, a5, a6, n1, n2
    Parked-on: #25807 · platform-core.nav-surfaces-render · no pin for a1, a2, a3, n2
    Parked-on: #25807 · platform-core.protocol-18-handshake-and-stored-replay · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · platform-core.settings-audit-secret-fingerprint · partial a0, a1, a2, a3, a4, n0, n1 (pin below the oracle layer); no pin for n4
    Parked-on: #25807 · platform-core.settings-organization-isolation-and-platform-rung · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · platform-core.v18-boot-refusals · partial a1, a2, a3, n0 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.action-param-widgets · partial a2, a3 (pin below the oracle layer); no pin for a0, a1, n0
    Parked-on: #25807 · records-forms.adhoc-filter-sort-builder · partial a4 (pin below the oracle layer); no pin for a0, a1, a2, a3, n0, n1, n2, n3
    Parked-on: #25807 · records-forms.cascading-multilevel-and-clear · partial a0 (pin below the oracle layer); no pin for a2, a3, a4, a5, n2
    Parked-on: #25807 · records-forms.cascading-options · partial a0 (pin below the oracle layer); no pin for a2, a3, a4, n1
    Parked-on: #25807 · records-forms.comment-reactions-and-edit-stamps · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.conditional-rules-header · no pin for a1, a2, a4, a5, n0, n1, n2
    Parked-on: #25807 · records-forms.encrypted-field-behavior · partial a2, a3, a4, n1, n2, n3 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.field-history-tracking · partial a0, a2, n2 (pin below the oracle layer); no pin for a1, a3, n0, n1, n3
    Parked-on: #25807 · records-forms.field-type-matrix · partial a5 (pin below the oracle layer); no pin for a1, a2, a6, n0, n1
    Parked-on: #25807 · records-forms.field-unique-enforcement · partial a0, a1, a2, a3, a4, n0, n1, n2 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.form-dirty-guard · partial a0, n0 (pin below the oracle layer); no pin for a1
    Parked-on: #25807 · records-forms.import-wizard-encoding-and-hints · no pin for a3, n0, n1
    Parked-on: #25807 · records-forms.master-detail-atomic-save · partial a0, a5 (pin below the oracle layer); no pin for a1, a2, a3, n0, n1
    Parked-on: #25807 · records-forms.object-hook-lifecycle · partial a0, a2, a3, a5, a7, a8, n0, n1, n2, n3, n4 (pin below the oracle layer); no pin for a1, a4, a6, a9
    Parked-on: #25807 · records-forms.predicate-relationship-traversal · partial a0, a1, a2, n0, n1, n2 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.record-discussion-mentions · partial a9 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.related-list-server-pagination · no pin for a0, a1, a3, a4, a5, n0, n1, n2
    Parked-on: #25807 · records-forms.v18-semantic-defaults · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.view-type-gallery · partial a5 (pin below the oracle layer); no pin for a0, a1, a2, a3, a4, n0, n1
    Parked-on: #25807 · records-forms.write-answer-advisories-rollback-and-tree-delete · partial a1, a2, n0 (pin below the oracle layer)
    Parked-on: #25807 · records-forms.write-time-option-and-element-shape-judgement · partial a1, a2, a3, a4 (pin below the oracle layer)
    Parked-on: #25807 · search.field-scoped-narrowing · partial a1, n0, n1 (pin below the oracle layer); no pin for a2, a3
    Parked-on: #25807 · search.global-search-skips-unreadable · partial a0, a4, n4 (pin below the oracle layer); no pin for a3, n3, n5
    Parked-on: #25807 · studio-authoring.expression-editors · partial a0, a2, a3, a4, a5, n1, n2 (pin below the oracle layer); no pin for a1, a6, n0
    Parked-on: #25807 · studio-authoring.meta-save-preconditions-and-draft-rows · partial a1, a2, a3 (pin below the oracle layer)
    Parked-on: #25807 · studio-authoring.metadata-diagnostics-sweep · partial a3, n0 (pin below the oracle layer); no pin for a0, a1, a2, a4, a5, a6, n2, n3, n4
    Parked-on: #25807 · studio-authoring.multi-package-item-rows · partial a1, a2, a3, a4 (pin below the oracle layer)
    Parked-on: #25807 · studio-authoring.object-designer-roundtrip · partial a1, a3, n0 (pin below the oracle layer); no pin for a0
    Parked-on: #25807 · studio-authoring.record-page-roundtrip · no pin for a2, a3
    Parked-on: #25807 · studio-authoring.save-door-runs-authoring-rules · partial a1, a2, a3, n0 (pin below the oracle layer)
    

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out (checklist-test §5) · 2026-10-28T15:34Z. The one FAIL, i18n.surface-matrix n1, is a product defect extracted as #26452, fixed and closed. The authorization-class finding of this run is extracted as #26453 under RUNNER rule 2 (detail withheld), fixed and closed. The 64 PARTIAL items are parked on #25807; one verdict is carried forward from wave 1. Closing completed.


    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