Skip to content

QA run · priority:P0 (23/23) · 5b14b7f3 · 2026-10-19 · 17 PASS / 5 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #24556

Closed

Description

@objectstack-fleet

QA run record for selector priority:P0 of the 18.0 release sweep (plan B: Tier 1 + Tier 2, Tier 3 deferred). Run by the checklist-test skill following docs/qa/platform-checklist/RUNNER.md.

Environment fingerprint

  • framework: 5b14b7f3ad8e2e0786d228772f473d07b36b2477 (objectstack-ai/objectstack main), tree clean, pnpm install --frozen-lockfile + pnpm build 76/76 green
  • console: .objectui-sha = 4016370af3c9c9dafec2bc5299afd8e8079701b8, built with pnpm objectui:build; packages/console/dist/.objectui-sha stamp equals the pin (pnpm check:console-sha green), so stale-console-bundle is ruled out for every console observation
  • app: examples/app-showcase, boot OS_PORT=PORT pnpm -C examples/app-showcase exec objectstack dev --ui --seed-admin -p PORT -d file:SCRATCH/db/BATCH/ITEM.db (one file DB per item, own port per item in ranges 41100–41999, at most one server per runner at a time); seed: --seed-admin (admin@objectos.ai) + showcase seed 132 rows; demo personas from examples/app-showcase/src/security/demo-personas.ts
  • Tier 1: every framework file named in the items' automated.ref, one vitest invocation per owning package (pnpm exec vitest run --maxWorkers=1 FILES inside the package; 33 packages, 254 files incl. one Playwright spec)
  • date: 2026-10-19 (UTC), container Linux 4 vCPU / 16 GB; runner: one orchestrator + 5 runner subagents (default judgment tier) in parallel, plus independent RUNNER rule 7 verifiers

Scope

Selector priority:P0 resolved with node scripts/checklist-select.mjs priority:P0 --json → 23 runnable items (1 blocked, hidden, not run: --include-blocked not passed per plan); 0 planned items matched. Item · revision · derived verdict:

item rev verdict
access-security.rls-both-sides 6 PARTIAL
access-security.write-path-guards 5 PASS
access-security.crud-permission-matrix 6 PARTIAL
access-security.owd-sharing-matrix 3 PASS
access-security.anonymous-deny-surfaces 3 PASS
access-security.walled-environment-metadata-operator-only 1 PARTIAL
ai.mcp-stdio-fail-closed 6 PASS
api-backend.query-contract-matrix 3 PASS
api-backend.packaged-action-disabled-dispatch 3 PASS
approvals.account-app-entry 2 PASS
automation.packaged-flow-disable-durable 3 PASS
cli.dev-boot-contract 5 PASS
cli.organization-ownership-ceremony 1 PARTIAL
identity-auth.default-organization-boot-invariant 1 PASS
integration-system.datasource-credential-refusal-matrix 4 PARTIAL
platform-core.boot-health 7 PASS
platform-core.seed-integrity 3 PASS
platform-core.console-login 4 PASS
platform-core.nav-surfaces-render 6 PASS
platform-core.builtin-apps-nav-render 6 PASS
platform-core.v18-boot-refusals 1 FAIL
records-forms.crud-roundtrip 10 PASS
studio-authoring.first-run-loop 3 PASS

Hidden blocked item (not run, per plan): access-security.no-active-org-session-semantics. Tier split: 14 items pinned (Tier 1 vitest + live drive of every non-test clause), 9 unpinned (Tier 2, every clause driven by hand: 3 api/cli, 6 browser/mixed against the console built at the pin). No Tier 3 (unpinned P2) item is in this selector, so nothing was deferred under the plan. Pin evidence: 58 pinned items across both selectors, 253 framework pin files, 0 failed, 0 zero-test files; platform-core.nav-surfaces-render's Playwright pin examples/app-showcase/e2e/showcase-smoke.spec.ts ran against a live boot with OS_TEST_CHROMIUM_EXECUTABLE_PATH=/opt/pw-browsers/chromium: 49 passed.

Per-clause verdicts

Clause ids are 0-based over acceptance[]; N0… are negative[]. Evidence is text server truth (API / log / build / test output). Clauses whose oracle is test cite the Tier 1 pin run.

item clause oracle verdict evidence
access-security.rls-both-sides 0 api pass as A (get-session=rls-a@verify.test) GET /data/showcase_private_note → 200 titles [A note 1, A note 2], owner_id=A, no B row; as B (get-session=rls-b) → 200 [B note 1] o…
access-security.rls-both-sides 1 api pass as A GET /data/showcase_private_note/‹B id> → 404 RECORD_NOT_FOUND (not-found-shaped denial)
access-security.rls-both-sides 2 api pass as A PATCH /‹B id> {body:'forged'} → 404 RECORD_NOT_FOUND; admin re-read body='b-original' unchanged (pre/post identical); A DELETE → 403 PERMISSION_DENIED; control: B P…
access-security.rls-both-sides 3 api pass admin GET list → 200 with all 3 ids created this run (2×A, 1×B)
access-security.rls-both-sides 4 test pass live objectstack verify --rls (exit 0): per-persona probe line '21 PROVEN (21 consistent, 0 HOLES) · 3 NOT PROVEN (0 member-visible, 0 probe-blocked, 3 skipped)'; tota…
access-security.rls-both-sides 5 test blocked(dependency: D11 spot-check needs the maintainer-hel… skipped-explanation half holds: 3 skipped rows each carry a benign detail — showcase_project_membership 'no plain-text probe field', showcase_ext_customer / showcase_ext…
access-security.rls-both-sides N0 api pass forged PATCH answered 404 and admin re-read shows row unchanged
access-security.rls-both-sides N1 api pass D11 verdict recorded only here (owd-sharing-matrix clause 4 cross-references)
access-security.rls-both-sides N2 api pass naming collision respected — no bare handle cited
access-security.write-path-guards 0 api pass admin POST /data/showcase_contact {lead_score:10} → 201, header x-objectstack-dropped-fields 'lead_score;reason=readonly', body droppedFields [{fields:[lead_score],reaso…
access-security.write-path-guards 1 api pass PATCH {lead_score:99} → 200 with droppedFields readonly; GET before/after both null
access-security.write-path-guards 2 api pass as Alice POST note {owner_id:‹Bob>} → 403 PERMISSION_DENIED ('creating a record owned by another user requires the transfer grant'); admin full list has 0 rows titled 'p…
access-security.write-path-guards 3 api pass Alice POST {owner_id:‹Alice>} → 201 owner=Alice; PATCH owner_id=‹Bob> → 403, owner_id=null → 403 PERMISSION_DENIED; admin re-read owner_id=Alice
access-security.write-path-guards 4 api pass Alice POST /createMany bare array of 3 → 201; all 3 owner_id=Alice's sys_user id; {records:[…]} wrapper → 400 VALIDATION_FAILED
access-security.write-path-guards 5 api pass seeded paid INV-1003: PATCH tax_rate 15 → 200 droppedFields reason readonly_when, re-read 8; its line PATCH quantity/unit_price/product → 200 all three dropped readonly_…
access-security.write-path-guards 6 api pass updateMany [valid, qty -1, valid] continueOnError:true → succeeded 2 failed 1, row1 VALIDATION_FAILED 'Qty must be ≥ 0'; re-reads rows 0/2 changed (8, 12), row1 unchange…
access-security.write-path-guards N0 api pass admin POST note owner_id=‹Bob> → 201 owner=Bob; admin PATCH owner transfer → 200 and persisted (both notes)
access-security.write-path-guards N1 test pass pin run: 5 pin file(s), 72 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.crud-permission-matrix 0 api pass 45-row access-matrix.json recounted: 41 showcase_* rows = 164 cells, 87 allow/77 deny after baseline union, 9 baseline flips all 2xx; every allow cell 2xx + effect prove…
access-security.crud-permission-matrix 1 api pass all 77 showcase_* deny cells → 403 PERMISSION_DENIED; delegate deny cells: sys_business_unit & _member create/edit/delete 403 PERMISSION_DENIED, sys_user edit 403, sys_u…
access-security.crud-permission-matrix 2 api pass every denied create: admin listing count of rows with the run's unique marker = 0
access-security.crud-permission-matrix 3 api pass auditor GET by id + list → 200/contained for foreign private_note, inquiry, invoice, invoice_line; contrast: contributor 404 + absent (note, inquiry), ops 404 absent (no…
access-security.crud-permission-matrix 4 api pass ops PATCH admin-owned announcement → 200, re-read changed; member_default identical PATCH → 403 PERMISSION_DENIED, re-read unchanged
access-security.crud-permission-matrix 5 api blocked(fixture: guest anchor unbound on stock boot; member… per knownGaps
access-security.crud-permission-matrix 6 api pass verdict per cell recorded for all 9 sets: 164 showcase_* cells + 16 delegate×sys_* cells (crud-cells.json in scratch G/)
access-security.crud-permission-matrix N0 api pass one deny cell per set re-run as admin: auditor inquiry edit 403→200, liaison brief delete 403→200, contributor account create 403→201, executive inquiry edit 403→200, gu…
access-security.crud-permission-matrix N1 api pass no withheld cell answered 2xx
access-security.owd-sharing-matrix 0 api pass private: B list excludes A's note, B GET by id 404, B PATCH 404 (admin re-read body 'orig'); A GET 200, A PATCH 200 persisted
access-security.owd-sharing-matrix 1 api pass public_read: admin announcement; B list contains it, B GET by id 200; B PATCH → 403 PERMISSION_DENIED, re-read title unchanged
access-security.owd-sharing-matrix 2 api pass ops PATCH same announcement → 200, re-read 'OPS-edit'
access-security.owd-sharing-matrix 3 api pass public_read_write: C1 (contributor) GET admin project 200, PATCH name → 200 persisted; A (member_default) PATCH → 403 PERMISSION_DENIED, row unchanged
access-security.owd-sharing-matrix 4 api pass cbp: C1 created invoice (owner=C1 email) + line 201; C2 list excludes line, by-id 404, PATCH 404 (re-read unchanged), DELETE 403; C1 list/GET/PATCH 200 persisted. D11 cr…
access-security.owd-sharing-matrix 5 api pass auditor list contains C1's line; by-id 200
access-security.owd-sharing-matrix 6 api pass all four models driven per persona-verb
access-security.owd-sharing-matrix N0 api pass forged direct PATCH by B on public_read announcement → 403, unchanged
access-security.owd-sharing-matrix N1 api pass C1 runs the same line probes → 200 (route works; denial is derivation)
access-security.anonymous-deny-surfaces 0 api pass anonymous (get-session 401): data, meta, actions, automation/_status, batch, security/explain, analytics query/sql/meta → all 401 code UNAUTHENTICATED
access-security.anonymous-deny-surfaces 1 api pass POST /actions/showcase_task/showcase_mark_done/anon-probe-id anon → 401 (member contrast → 404 RECORD_NOT_FOUND)
access-security.anonymous-deny-surfaces 2 api pass rest-flat {error,code,message}, no success: data/meta/batch/security; dispatcher-wrapper {success:false,error:{code,message,httpStatus:401}}: actions/automation/3 analyt…
access-security.anonymous-deny-surfaces 3 api pass anon: query/sql valid + malformed and meta → 401 dispatcher-wrapper; member: query 200 (count 10), sql 200, meta 200, malformed query/sql → 400 VALIDATION_FAILED
access-security.anonymous-deny-surfaces 4 api pass member GET /data/showcase_private_note → 200, GET /meta → 200
access-security.anonymous-deny-surfaces 5 api pass anonymous GET /forms/contact-us → 200 {slug:'contact-us',object:'showcase_inquiry',…}
access-security.anonymous-deny-surfaces 6 api pass all 7 variant families driven (analytics at 3 faces)
access-security.anonymous-deny-surfaces N0 api pass anon DELETE /automation/showcase_reassign_wizard → 401 dispatcher-wrapper; admin GET same → 200 flow still registered
access-security.walled-environment-metadata-operator-only 0 test pass pin run: 7 pin file(s), 130 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.walled-environment-metadata-operator-only 1 api blocked(fixture: walled posture cannot be booted on 18.0 — … boot log: '✖ FATAL: tenancy posture 'isolated' is not supported in 18.0 (NOT_IMPLEMENTED). Refusing to boot … the HTTP server was never started'
access-security.walled-environment-metadata-operator-only 2 api blocked(fixture: walled posture cannot be booted on 18.0 — … walled-operator half unrunnable. Single-posture half measured and holds: admin (get-session admin@objectos.ai, platform_admin) PUT /api/v1/meta/object/qa_walled_probe {n…
access-security.walled-environment-metadata-operator-only N0 api blocked(fixture: walled posture cannot be booted on 18.0 — … no walled boot possible
ai.mcp-stdio-fail-closed 0 log pass stdio on, key unset: process exit 1, stderr "[MCP] The stdio transport is enabled (OS_MCP_STDIO_ENABLED / autoStart) but OS_MCP_STDIO_API_KEY is not set. … Refusing to s…
ai.mcp-stdio-fail-closed 1 log pass osk_unknown: exit 1, "[MCP] OS_MCP_STDIO_API_KEY did not resolve to a valid identity (unknown / revoked / expired / owner-less). Refusing to start stdio (ADR-0101)."; re…
ai.mcp-stdio-fail-closed 2 log pass "[MCP] stdio transport principal-bound to OS_MCP_STDIO_API_KEY identity DvzFELfpPw5c6dpvzXNVqSHicKL5YfcR (RLS/FLS/tenant applied)" = contributor member userId from sign-…
ai.mcp-stdio-fail-closed 3 api pass RLS (contributor key): MCP query_records showcase_invoice → 2 rows [INV-QA-MCP-1,-2] = member REST (Bearer same key) 2 rows, identical field sets; admin REST 14 rows. ge…
ai.mcp-stdio-fail-closed 4 api pass count by status, member MCP aggregate_records → [{draft:2}] = member REST POST /data/showcase_invoice/query aggregate [{draft:2}]; admin REST [{draft:4},{paid:5},{sent:5…
ai.mcp-stdio-fail-closed 5 api pass liaison MCP aggregate sum(budget), count groupBy budget, count_distinct(spent) → isError {code PERMISSION_DENIED, status 403, message "[Security] Field read denied: not …
ai.mcp-stdio-fail-closed 6 api pass same session: pre-revoke query_records 2 rows; PATCH /api/v1/data/sys_api_key/UndscXiXI3IAZTDr {revoked:true} → 200; next query_records → result.isError true, text parse…
ai.mcp-stdio-fail-closed 7 log pass os start with neither OS_MCP_STDIO_ENABLED nor key: health 200, stdout 0 bytes, stderr "[MCP] Transport not auto-started (HTTP is served per-request at /api/v1/mcp regar…
ai.mcp-stdio-fail-closed N0 api pass no invalid/revoked key ever produced a serving process (health refused) or a served read
ai.mcp-stdio-fail-closed N1 api pass member MCP rows ⊆ member REST rows (equal sets)
ai.mcp-stdio-fail-closed N2 api pass member MCP count 2 ≠ admin total 14
ai.mcp-stdio-fail-closed N3 api pass masked-field aggregates refused, no number
ai.mcp-stdio-fail-closed N4 api pass post-revoke call carried API_KEY_REVOKED and no row
api-backend.query-contract-matrix 0 api pass 20 operator variants × 3 spellings ($-object POST, AST array POST, GET $filter AST) — all OK set-equal vs locally computed ids from the 14-row account / 10-row task base…
api-backend.query-contract-matrix 1 api pass GET $orderby=name&$top=3&$skip=2 = sorted[2..4]; $top=4&$skip=7 = sorted[7..10]; POST {orderBy,limit:3,offset:2} and {top:4,offset:7} equal the same slices
api-backend.query-contract-matrix 2 api pass $select=name,status and body fields [name,status] → every record keys exactly ["name","status"]; fields ["account.name"] on showcase_invoice → 400 INVALID_FIELD, message…
api-backend.query-contract-matrix 3 api pass $orderby annual_revenue asc/desc and POST orderBy asc/desc: full 14-value sequence equals local sort; $orderby=no_such_field → 400 INVALID_SORT, POST orderBy same → 400 …
api-backend.query-contract-matrix 4 api pass contributor member (invite+sign-up+contributor position) POST /data/showcase_invoice/query {where name INV-QA-H1, expand contact} → own invoice returned, contact left as…
api-backend.query-contract-matrix 5 api pass POST where {status:{$nin:"done"}} → 400 VALIDATION_FAILED fields[0].field "query.where.status.$nin" message names $nin, status, ARRAY; AST [status,not_in,done] → 400 VAL…
api-backend.query-contract-matrix 6 api pass ?$pageSize=5 → 400 UNSUPPORTED_QUERY_PARAM listing $top,$skip,$orderby,$select,$count,$search,$searchFields,$filter,$expand; ?not_a_field=x → 400 INVALID_FIELD; where {n…
api-backend.query-contract-matrix 7 api pass $in [] → 200 0 rows; $nin [] → 200 10/10 task rows (set-equal)
api-backend.query-contract-matrix 8 api pass every variant recorded: 16 op variants (plus date-between, no-wildcard like, 2 task-typed) + params $top,$skip,$select,$orderby,$count (total 14 with 2 rows),$search (No…
api-backend.query-contract-matrix N0 api pass {limit:"ten"} → 400 VALIDATION_FAILED; {not_a_query_key:{a:1}} → 400 INVALID_FIELD; neither returned records
api-backend.packaged-action-disabled-dispatch 0 api pass stock: no ledger row for showcase_mark_done; POST /actions/_activation/showcase_task/showcase_mark_done {enabled:false} → 200; ledger row {metadata_type:action,name:show…
api-backend.packaged-action-disabled-dispatch 1 api pass param_gallery disabled + {recordId bogus, params:{bogus_key:1}} → 409 ACTION_DISABLED; re-enabled identical request → 400 VALIDATION_ERROR "Invalid action params: Action…
api-backend.packaged-action-disabled-dispatch 2 api pass both disabled traces 409 with a nonexistent recordId in play and no mutation; enabled-control caveat noted (record load is best-effort, no 404 expected)
api-backend.packaged-action-disabled-dispatch 3 api pass showcase_zoo_perm_missing enabled → 403 PERMISSION_DENIED "…requires capability [showcase.restricted_ops]…"; disabled → 403 identical body (byte-equal true)
api-backend.packaged-action-disabled-dispatch 4 api pass live POST /api/v1/mcp tools/call run_action {actionName:showcase_portfolio_snapshot}: enabled → ok result; disabled (/_activation/global/…) → isError, {error:{code:ACTIO…
api-backend.packaged-action-disabled-dispatch 5 api pass after full restart: ledger row active:false still present; invoke → 409 ACTION_DISABLED; re-enable → 200; invoke real task → 200 {ok:true} (progress 0→100); same row id …
api-backend.packaged-action-disabled-dispatch 6 api pass showcase_bulk_reassign disabled → 409 ACTION_DISABLED naming showcase_bulk_reassign; no ledger row for target flow showcase_reassign_wizard; re-enabled control → 200 sta…
api-backend.packaged-action-disabled-dispatch N0 api pass no 400/handler answer for any disabled action
api-backend.packaged-action-disabled-dispatch N1 api pass unentitled caller got 403 not 409; stock boot had no ledger row and actions dispatched (bulk_reassign/portfolio controls 200)
api-backend.packaged-action-disabled-dispatch N2 api pass anonymous POST /actions/showcase_task/showcase_mark_done → 401 UNAUTHENTICATED
approvals.account-app-entry 0 build pass packages/console/dist/.objectui-sha = 4016370af3c9c9dafec2bc5299afd8e8079701b8 == .objectui-sha; grep of dist/assets/index-a3aFDTDQ.js (entry chunk): '…as({ref:`approval…
approvals.account-app-entry 1 screenshot pass clicked the account app's Inbox → 'Approvals' sidebar entry (href /_console/apps/com.objectstack.account/component/approvals/inbox); landed that URL; screenshot: 'Approv…
approvals.account-app-entry 2 api pass persona qa-approver-i@verify.test (admin create-user → change-password; sys_user_position contributor + finance; get-session positions [org_member, contributor, finance,…
approvals.account-app-entry 3 api pass request areq_02d7f853… (launched by persona PATCH of own invoice INV-QA-I-1 status=sent): before GET /api/v1/approvals/requests/:id pending_approvers [persona, admin, ad…
approvals.account-app-entry 4 screenshot pass cold load /_console/apps/com.objectstack.account/component/approvals/inbox?request=areq_02d7f853… (2 fresh loads) → drawer opened on that request (INV-QA-I-1, Finance + …
approvals.account-app-entry 5 dom pass after screenshot of the list: record link href = /_console/apps/com.objectstack.account/showcase_invoice/record/35zoZgHUw-ArB1oK (current app segment, not setup); person…
approvals.account-app-entry 6 screenshot pass interface language set via the login-page globe menu (option '中文', html lang 'zh'): account sidebar entry reads 待我审批; tabs 待我审批 / 我发起的 / 全部; status badge 待审批 in the All …
approvals.account-app-entry N0 screenshot pass full inbox rendered, no component-not-found state
approvals.account-app-entry N1 api pass Approvals entry present for the non-admin; setup absent for the same session
automation.packaged-flow-disable-durable 0 api pass POST /automation/showcase_urgent_task_alert/toggle {enabled:false} → 200; GET /data/sys_metadata_activation → exactly 1 row {id:-iXdUI7AO17xTUTx, metadata_type:flow, nam…
automation.packaged-flow-disable-durable 1 api pass POST /automation/showcase_urgent_task_alert/trigger → 409 FLOW_DISABLED "Flow 'showcase_urgent_task_alert' is disabled — it is switched off for this installation in the …
automation.packaged-flow-disable-durable 2 api pass new process: GET /automation/_status → {enabled:false,bound:false}; boot log (info) "[Automation] Activation ledger: 1 packaged flow(s) are switched off for this install…
automation.packaged-flow-disable-durable 3 api pass runs list 1 before post-restart urgent create, 1 after (no new run); baseline create pre-toggle had produced 1 run, same-boot disabled create 0
automation.packaged-flow-disable-durable 4 api pass toggle {enabled:true} → 200; same row id -iXdUI7AO17xTUTx now active:true (updated_at bumped, 1 row); _status enabled:true bound:true; final urgent create → runs 2
automation.packaged-flow-disable-durable N0 api pass toggle wrote the row
automation.packaged-flow-disable-durable N1 api pass restart did not re-arm (bound false, no run)
automation.packaged-flow-disable-durable N2 api pass row not deleted on re-enable
automation.packaged-flow-disable-durable N3 api pass ledger clause scored on message text, not code alone
cli.dev-boot-contract 0 api pass dev --ui --seed-admin -p 41807: /api/v1/health 200 after 13 s; /api/v1/ready 200 {status:ready,state:running}; /_console/ 200 text/html, headless screenshot showed the O…
cli.dev-boot-contract 1 api pass sign-in admin@objectos.ai/admin123 → 200 + token; restart same DB with --admin-password changed99 → admin123 200 token, changed99 401 INVALID_EMAIL_OR_PASSWORD
cli.dev-boot-contract 2 log pass Database lines: -d file:… → that file; OS_DATABASE_URL=file:…devboot-env.db → env file; -d :memory: → ":memory:"; config-declared default (named sqlite datasource qa_hom…
cli.dev-boot-contract 3 log pass --fresh: "🧪 Fresh OS_HOME: /tmp/objectstack-dev-vo6Duz", Database file:/tmp/objectstack-dev-vo6Duz/data/objectstack.db; SIGINT exit 130; dir gone after exit; ‹cwd>/.obj…
cli.dev-boot-contract 4 log pass B on busy 41808: "↪ server bound to port 41809 (requested 41808)", API/Console URLs printed with 41809, health on 41809 200
cli.dev-boot-contract 5 log pass after touching src/ui/actions/index.ts: "⚠ dist/objectstack.json is OLDER than your sources — this boot serves the STALE build. newest source: src/ui/actions/index.ts (2…
cli.dev-boot-contract 6 log pass empty dir: exit 1, stdout "✗ Config file not found in …", stderr "Run in a directory with objectstack.config.ts, pass --artifact ‹path|url>, or run from the monorepo ro…
cli.dev-boot-contract N0 log pass nothing-chosen default is persistent file (marker survived restart)
cli.dev-boot-contract N1 log pass --database-driver memory → INVOCATION ERROR oclif allowlist, exit 2; OS_DATABASE_DRIVER=mingo → refused before any Database line, exit 1, names --fresh and :memory:; -d …
cli.dev-boot-contract N2 log pass legacy dev.db read with notice; no empty objectstack.db created beside it
cli.dev-boot-contract N3 log pass shifted port reported
cli.organization-ownership-ceremony 0 test pass pin run: 7 pin file(s), 162 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
cli.organization-ownership-ceremony 1 build skipped capability withdrawn in 18.0 (ruling record 6259608309, commit 5b14b7f #24506): bare os migrate organization-ownership --database-url file:cer.db → exit 1 '✗ os migra…
cli.organization-ownership-ceremony 2 build skipped same withdrawal: --apply --backup-taken (no plan), --apply --plan-file ‹foreign plan>, --apply with a second process holding the file, and --json each exit 1 with the NO…
cli.organization-ownership-ceremony 3 build pass drop-gate half (driveable without the ceremony): os migrate apply --allow-destructive --yes on v17 copy gate.db → exit 1 '✗ Refusing this --allow-destructive run: it w…
cli.organization-ownership-ceremony 4 log skipped no migrated copy can exist in 18.0 (ceremony refuses NOT_IMPLEMENTED); the before-state refusal is covered in platform-core.v18-boot-refusals
cli.organization-ownership-ceremony N0 build pass every refusing ceremony arm (bare, 3× --apply variants, --json) left cer.db byte- and logically identical (sha 28faf786…, dbdiff 0); the refused drop-gate run left gate.…
identity-auth.default-organization-boot-invariant 0 test pass pin run: 2 pin file(s), 59 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
identity-auth.default-organization-boot-invariant 1 log pass fresh DB: sys_organization row {id:org_mvf9n2x7e56ow4f5, slug:'default', name:'Default Organization', created_at:2026-10-19T13:04:08.592Z} precedes the first user admin@…
identity-auth.default-organization-boot-invariant 2 api pass GET /api/v1/data/sys_member (admin) → 200: admin user role 'owner' org_mvf9n2x7e56ow4f5; member1@example.com (POST /auth/admin/create-user → 200 mustChangePassword:true,…
identity-auth.default-organization-boot-invariant 3 api pass GET /api/v1/data/sys_business_unit → 5 seeded rows (bu_acme, bu_field_ops, bu_west_coast, bu_east_coast, bu_hq_finance) all organization_id org_mvf9n2x7e56ow4f5
identity-auth.default-organization-boot-invariant N0 api pass scratch-DB scan of every table with an organization_id column after boot+seed: 32 non-empty tables (sys_member, sys_user_position, sys_business_unit, sys_approval_*, sys…
integration-system.datasource-credential-refusal-matrix 0 build pass 11 door variants, os build exit 2 AND POST /api/v1/datasources 400 DATASOURCE_ADMIN_ERROR for each, every message naming the key/position and external.credentialsRef: co…
integration-system.datasource-credential-refusal-matrix 1 api blocked(environment: no reachable credential-protected post… publish half observed: credentialsRef datasource accepted build exit 0 and POST 201 (status error — secret not resolvable / ECONNREFUSED 127.0.0.1:5432); connect not pro…
integration-system.datasource-credential-refusal-matrix 2 api pass admin: GET /datasources/‹n> and GET /meta/datasource/‹n> for qa_set, qa_unset, qa_enc_rt, qa_legacy_*: zero PLANT- strings in full bodies; config identical on both doors…
integration-system.datasource-credential-refusal-matrix 3 api pass GET /datasources/qa_set → hasSecret:true, redactedConfigKeys:[] (meta door external.credentialsRef sys_secret:sec_…); qa_unset → hasSecret:false, no credentialsRef; qa_e…
integration-system.datasource-credential-refusal-matrix 4 api pass planted rows (server stopped): postgres config {passwd,pwd}, turso {token,jwt,auth_token,authtoken}; after reboot both doors serve config {url} only, admin door redacted…
integration-system.datasource-credential-refusal-matrix 5 api pass unknown driver qa_plugin_driver (POST 201): password, authToken absent and url userinfo stripped (qadb://qa@host:1/db) on both doors, redactedConfigKeys ["authToken","pa…
integration-system.datasource-credential-refusal-matrix 6 api blocked(environment: no reachable postgres for the connect … partial reading: GET /datasources/qa_set then PATCH with its config unmodified → 200; afterwards hasSecret still true and meta-door credentialsRef unchanged (sys_secret:…
integration-system.datasource-credential-refusal-matrix 7 api pass authenticated contributor member: both doors 403 PERMISSION_DENIED (manage_platform_settings); anonymous: 401 UNAUTHENTICATED on both; no PLANT- strings; data API sys_me…
integration-system.datasource-credential-refusal-matrix N0 api pass no canonical credential in any read; only the ruled-boundary apiSecret
integration-system.datasource-credential-refusal-matrix N1 build pass build and runtime doors agree on every variant
integration-system.datasource-credential-refusal-matrix N2 api pass both doors redact identically
integration-system.datasource-credential-refusal-matrix N3 api pass legacy aliases redacted
integration-system.datasource-credential-refusal-matrix N4 api pass unknown driver canonical keys redacted
integration-system.datasource-credential-refusal-matrix N5 api pass echoed config did not drop the bound secret (stored half)
integration-system.datasource-credential-refusal-matrix N6 build pass every refusal names credentialsRef / credentialRef
platform-core.boot-health 0 api pass GET /api/v1/health → 200 {status:ok, version 18.0.0-next.5} at 10.0 s after process start (polled 1 s)
platform-core.boot-health 1 api pass GET /api/v1/ready → 200 {status:'ready', state:'running'} right after health went green
platform-core.boot-health 2 log pass Boot log (captured before any probe besides health/ready): Flows banner '32 flow(s) 19 bound · 8 draft' + two ℹ lines, both 'NOT bound — disabled by deployment policy' (…
platform-core.boot-health 3 api pass GET /_console/ → 200 text/html (‹base href=/_console/>); GET /api/v1/meta/app?id=showcase_app (admin bearer) → 200 {type:'app', items:[showcase_app]} keys name,label,ico…
platform-core.boot-health 4 api pass grp_data served children = 12 objectNames (project, task, account, contact, invoice, expense_report, product, team, category, business_unit, field_zoo, cascade) — diff v…
platform-core.boot-health N0 log pass no SeedLoader rejection / dropped-record line; Seeds row clean (132 rows)
platform-core.boot-health N1 log pass health 200 with zero ERROR lines in boot window; no post-health 4xx probe traffic was misread
platform-core.seed-integrity 0 api pass expected from the seed module (compiled artifact data[] of src/data/seed/index.ts, matching the authoring baseline): account 14, contact 32, inquiry 3, product 4, projec…
platform-core.seed-integrity 1 api pass Specimen — Full: 35 authored fields equal (multiselect/checkboxes/tags/lookups as sets, json/address/repeater/record structurally, f_lookup = Northwind id wHuawcMIE5R7KU…
platform-core.seed-integrity 2 log pass banner "Seeds: com.example.showcase 132 rows" plain (no ⚠, no error/lost-link count); no "[Seeder] … dropped record(s)" line
platform-core.seed-integrity 3 api pass restart on same DB: second 19-object sweep identical to the first (diff empty), banner still 132 rows
platform-core.seed-integrity 4 api pass f_user null, f_users null, f_secret null; 0 of 10 tasks carry cover — recorded expected-absent
platform-core.seed-integrity N0 api pass no nav object at 0
platform-core.seed-integrity N1 api pass counts did not grow on restart
platform-core.console-login 0 screenshot pass Form sign-in (Playwright fill = native input events; ref-targeted 'Sign In' button) → POST /api/v1/auth/sign-in/email 200 → landed /_console/home; screenshot: header + '…
platform-core.console-login 1 network pass after page.reload(): first authed calls GET /auth/get-session 200, /discovery 200, /auth/organization/list 200, /meta/app 200; in-page GET /api/v1/meta/app?id=showcase_a…
platform-core.console-login 2 network pass in-page POST /api/v1/auth/sign-out (bearer) → 200 {success:true}; same old token still in localStorage → GET /api/v1/meta/app?id=showcase_app 401 {code:UNAUTHENTICATED};…
platform-core.console-login 3 screenshot pass authed navigation to /_console/apps/com.example.showcase/showcase_account after expiry → redirected to /_console/login?redirect=%2Fapps%2Fcom.example.showcase%2Fshowcase…
platform-core.console-login 4 network pass re-signin 200 → returned to the SAME route /_console/apps/com.example.showcase/showcase_account, Accounts grid rendered (华宁科技 …); 32 API responses all 2xx; meta/app?id=s…
platform-core.console-login N0 network pass wrong password → POST sign-in/email 401 {code:INVALID_EMAIL_OR_PASSWORD}, no set-cookie, no set-auth-token; UI shows role=alert 'Invalid email or password. Please try ag…
platform-core.console-login N1 network pass expired session did not keep serving the shell: 401 on wire + redirect to login (see c2/c3)
platform-core.nav-surfaces-render 0 test pass Pin run by this runner against its own boot: SMOKE_API_URL=http://localhost:41901 OS_TEST_CHROMIUM_EXECUTABLE_PATH=/opt/pw-browsers/chromium pnpm exec playwright test --…
platform-core.nav-surfaces-render 1 api pass GET /api/v1/meta/app?id=showcase_app → 49 non-separator leaves; keyed diff vs SURFACES (49 entries, path base()/slice()): served-not-in-SURFACES {} and SURFACES-not-serv…
platform-core.nav-surfaces-render 2 dom pass /_console/apps/com.example.showcase/object_that_does_not_exist, 2 fresh loads: screenshot first shows header + full Showcase sidebar (Capability Map, Data Model, Analyti…
platform-core.nav-surfaces-render 3 screenshot pass none encountered: 0 pageerrors / 0 failures across 49 smoke surfaces + bad-route probe, so no ErrorBoundary fallback was triggered (explicit none-encountered)
platform-core.nav-surfaces-render N0 test pass no blank ‹main> (suite + bad route)
platform-core.nav-surfaces-render N1 test pass suite treats data-boot-splash / splash lines as not rendered; all 49 passed past it
platform-core.nav-surfaces-render N2 dom pass bad route kept shell (no white page)
platform-core.nav-surfaces-render N3 test pass chart assertions are the bounded-poll ones; all 5 chart surfaces green
platform-core.builtin-apps-nav-render 0 screenshot pass Admin walk via the real sidebar (all groups expanded, every href visited on a fresh navigation, screenshot first, then DOM): Setup 42/42 and Account 8/8 rendered, 0 blan…
platform-core.builtin-apps-nav-render 1 api pass GET /api/v1/meta/app (admin) → [showcase_app, setup, account]; ?id=studio → 200 {items:[]} (asserted absence, by design). setup (requiredPermissions [setup.access]) grou…
platform-core.builtin-apps-nav-render 2 screenshot pass Mei (phone.demo@example.com; get-session positions [org_member, everyone]) form sign-in: /_console/apps/setup, /_console/apps/com.objectstack.setup and a deep Setup URL …
platform-core.builtin-apps-nav-render 3 api pass forged as Mei: GET /api/v1/meta/app?id=setup → 200 {items:[]}; GET /api/v1/meta/app/setup → 403 PERMISSION_DENIED "You do not have permission to open the 'setup' app."; …
platform-core.builtin-apps-nav-render 4 api pass Mei GET /api/v1/meta/app?id=setup → 200 {items:[]} so nav_api_keys + manage_platform_settings settings URLs are unreachable; CONTROL only: admin vs Mei account navs iden…
platform-core.builtin-apps-nav-render 5 api pass nav_organizations absent (Tenancy: single); nav_business_units present and sys_business_unit registered (meta 200); nav_jwks absent for admin
platform-core.builtin-apps-nav-render 6 screenshot pass pruned entries absent from served+rendered nav: nav_sso_providers (not wired; sys_sso_provider object exists but no entry), sys_verification / sys_device_code (omit list…
platform-core.builtin-apps-nav-render N0 screenshot pass no blank/placeholder destination; marketplace is a named error state (knownGap)
platform-core.builtin-apps-nav-render N1 api pass member cannot reach Setup (server 403 / empty items; UI named denial); Studio absent for all
platform-core.builtin-apps-nav-render N2 api pass no permission-gated entry served to member (whole setup app withheld)
platform-core.v18-boot-refusals 0 test pass pin run: 3 pin file(s), 29 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
platform-core.v18-boot-refusals 1 log pass exit 1 after 4 s, no 'Press Ctrl+C'/listening line, nothing on 41403; '✗ This database is still in the v17 organization-ownership shape: sys_job, sys_job_queue, sys_job_…
platform-core.v18-boot-refusals 2 build fail checksum before 28faf786d7ed1255… after f157438a35920a0f… (run 1, showcase stack). Logical diff of the refused copy vs original: +37 tables (showcase_, sys_approval_, …
platform-core.v18-boot-refusals 3 log pass exit 1: '✗ SecurityPlugin cannot boot: its authorization store reads sys_user, sys_member, and this kernel does not register sys_user, sys_member… mount AuthPlugin, or, …
platform-core.v18-boot-refusals N0 log pass the v18 boot did not serve the v17 DB (exit 1, no listener) and wrote no rows (sys_migration/sys_organization/seed tables unchanged); the additive DDL it did apply is sc…
records-forms.crud-roundtrip 0 api pass UI New → name os-qa-i2, Industry Finance, Lifecycle Active, website empty → POST /api/v1/data/showcase_account body {industry:finance,status:active,sales_region:amer(for…
records-forms.crud-roundtrip 1 api pass detail Edit → annual_revenue 1234567 → Update → PATCH /api/v1/data/showcase_account/Jc8ZtGwLTwq93X8H body {annual_revenue:1234567} 200; full-row diff before/after: only …
records-forms.crud-roundtrip 2 api pass detail ⋯ → Delete → confirm 'Delete Account "os-qa-i2"?' → DELETE 200; filtered GET → {records:[], total:0}; unfiltered list reload (2 loads) lacks os-qa-i2, 16 records
records-forms.crud-roundtrip 3 screenshot pass post-create full reload: grid row 'os-qa-i2 · Active · Finance · —' (17 records); post-delete reload: row gone (16 records), siblings intact
records-forms.crud-roundtrip 4 dom pass History tab (after screenshot): 'Dev Admin UPDATE … Annual Revenue: — → 1234567' and 'Dev Admin CREATE ▸ 5 fields populated' expanding to Owner: Dev Admin, Account Name:…
records-forms.crud-roundtrip 5 api pass UI create of os-qa-i2-华宁 → 201; filtered GET returns name bytes os-qa-i2-\xe5\x8d\x8e\xe5\xae\x81 (identical); $search=华宁 → total 2 [华宁科技, os-qa-i2-华宁]; list quick-searc…
records-forms.crud-roundtrip 6 api pass readonly half via pin protocol.readonly-insert.test.ts (2 pin files, 32 tests, 0 failed @ 5b14b7f); non-readonly half: source Contoso re-owned to the member, admin POST…
records-forms.crud-roundtrip 7 api pass contributor-bound member (recipe search:qa-contributor-bound-member replayed: admin create-user + change-password + sys_user_position contributor; positions [org_member,…
records-forms.crud-roundtrip N0 dom pass New → Create with empty Account Name: dialog stays open with 'Account Name is required'; no POST sent; count 14→14
records-forms.crud-roundtrip N1 api pass clone re-derived id/audit/owner (c6) and RLS-invisible clone refused 404 (c7); readonly approval_status carry-over → readonly half via pin protocol.readonly-insert.test.…
records-forms.crud-roundtrip N2 api pass SUBSTITUTION (showcase_account.status has a default): POST /api/v1/data/showcase_invoice without required name (no default) → 400 VALIDATION_FAILED fields[{field:name, c…
records-forms.crud-roundtrip N3 api pass POST showcase_account tax_id 'not-a-tax-id!!' → 400 VALIDATION_FAILED fields[{field:tax_id, code:invalid_format, 'Tax ID must look like 12-3456789.'}]; count 17→17
studio-authoring.first-run-loop 0 network pass Home 'Build an app' → /_console/studio; New package (writable base) wizard: name 维修中心, package-form-id-input com.example.repairs, namespace repairs → POST /api/v1/packag…
studio-authoring.first-run-loop 1 api pass New object 'Repair Ticket' (identifier auto-suggested repair_ticket, dialog shows 'Saved as repairs_repair_ticket', OWD Private confirmed) → PUT /meta/object/repairs_rep…
studio-authoring.first-run-loop 2 api pass Studio Records grid → Add record name 'Broken compressor RT-1', Status In Progress → POST /api/v1/data/repairs_repair_ticket 201 {status:'in_progress'}; GET /api/v1/data…
studio-authoring.first-run-loop 3 screenshot pass Create app 'Repair Center' (identifier auto repair_center, 'Add this package's objects as menu items' checked by default) → PUT /meta/app/repair_center draft with nav_re…
studio-authoring.first-run-loop 4 log pass server log: exactly one 'Server is ready' (182 lines, no restart/rebuild event); listener PID 10088 recorded at boot 13:19:54 still the listener at 13:27:57 after the en…
studio-authoring.first-run-loop 5 api pass forged writes vs read-only com.example.showcase: PUT /meta/object/showcase_qa_probe?mode=draft&package=com.example.showcase → 422 WRITABLE_PACKAGE_REQUIRED ('package is …
studio-authoring.first-run-loop N0 api pass no silent acceptance (c5)
studio-authoring.first-run-loop N1 screenshot pass published app in launcher; list renders label chip (c3)

Fails — reproduction rules and disposition

platform-core.v18-boot-refusals · acceptance[2] — FAIL (P0) · disposition: assertion defect

Clause: "the refused boot did not alter the database" (verify: checksum before == after).

Reproduction rule:

  1. Mint a v17 SQLite: in a scratch dir outside the workspace, pnpm add --ignore-workspace @objectstack/cli@17.7.0, then objectstack start -d file:V17.db --auth-secret <32+ chars>, make one sign-up, stop it.
  2. cp V17.db COPY.db; record sha256sum COPY.db and the schema (sqlite_master, pragma_table_info per table — read through SQLite so the -wal is included).
  3. In any v18 app dir: OS_DATABASE_URL=file:COPY.db objectstack serve -p PORT → exit 1 with the organization-ownership refusal, nothing listening (clauses 1 and 3 pass).
  4. Re-read COPY.db. Expected (clause): identical to V17.db. Actual: the additive v18 schema sync ran before the guard — run 1 (showcase stack): sha 28faf786… → f157438a…, +37 tables, __search column on 21 sys_* tables, bundle_member/draft_changes on sys_metadata, ~40 indexes, no row content changed; run 2 (one-object stack): main-file sha unchanged but a 259 KB -wal held 2 new tables, 2 sys_metadata columns, 9 indexes (a main-file checksum alone can mask the write).

RUNNER rule 7: an independent agent re-derived the verdict from the captured evidence alone — agrees the clause is violated; disposition assertion defect (clause wrong, product right): packages/runtime/src/organization-ownership-boot-guard.ts documents starting after the engine (whose start() runs the additive schema sync the ceremony depends on) and ahead of every plugin that writes a row; ADR-0131 D10 forbids auto-migration (the ceremony steps), not additive sync; no cited source requires a byte-unchanged file. Not release-blocking. Proposed clause: "the refused boot wrote no row and ran no D10 step", verified by a row-level diff that includes the -wal. Open question for the maintainer (not a defect on this evidence): the refusal tells the operator to keep the database on a 17.x runtime after the v18 boot has added v18 schema to it.

Derived item verdicts

17 PASS / 5 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN. PARTIAL items carry only blocked clauses besides passes: rls-both-sides c5 (D11 spot-check needs the private write-up — blocked(dependency)); crud-permission-matrix c5 (guest create-without-read not observable on a stock boot — blocked(fixture)); walled-environment-metadata-operator-only c1, c2, N0 (18.0 refuses to boot OS_TENANCY_POSTURE=isolated: "FATAL: tenancy posture 'isolated' is not supported in 18.0 (NOT_IMPLEMENTED)", so the walled posture cannot be driven live — the P0 negative rests on its pins only); cli.organization-ownership-ceremony c1, c2, c4 skipped (18.0 refuses os migrate organization-ownership NOT_IMPLEMENTED by ruling — every arm refused and left the DB identical); datasource-credential-refusal-matrix c1, c6 (no reachable Postgres — blocked(environment)). Several clauses were scored on the clause's evident intent where its literal wording disagrees with both the product and the item's own pin; each is listed under Checklist-accuracy below so the wording gets fixed (none of them hides a product defect on this evidence).

Checklist-accuracy findings / fixture gaps

For the wave anchor card (collected by the dispatch session); not extracted, no checklist edit in this wave. 22 checklist-accuracy findings and 7 fixture gaps — the full itemized list is the first comment on this issue (moved there only because the body limit is 65,536 characters).

Handoff

Every item the selector returned has a verdict; no item left un-reached.

Timing

  • Environment preparation ≈ 4,840 s: orchestrator 1,212 s wall (cold pnpm install 21 s, pnpm build 331 s, console build 3 attempts — the first two were cgroup-OOM-killed (exit 137) while racing vitest and runner boots, the third, alone with turbo --concurrency=1, took 527 s) + runner boots/provisioning summed over 9 batches 3,630 s.
  • Testing ≈ 11,980 s: Tier 1 vitest 1,521 s (first attempt at --maxWorkers=2 was OOM-killed on @objectstack/dogfood and @objectstack/objectql; re-run at --maxWorkers=1 with nothing else heavy running — the verdicts cite only the re-run) + live clause driving summed over 9 batches 10,461 s.
  • Environment : testing ≈ 1 : 2.5. Both runs (priority:P0 and since:v18) shared ONE build and one Tier 1 batch; 4 items sit in both selectors and carry the same verdicts in both records.

Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Checklist-accuracy findings / fixture gaps (record continuation)

    Continuation of the run record above (priority:P0, 5b14b7f). For the wave anchor card; not extracted.

    Checklist-accuracy

    • access-security.write-path-guards — steps[5] 'set an invoice to status paid': a PATCH {status:'paid',paid_on} on a draft answers 400 VALIDATION_FAILED 'Issued On is required' (requiredWhen); used the seeded paid INV-1003 instead — the step should say to use a seeded paid invoice or include issued_on+paid_on
    • access-security.walled-environment-metadata-operator-only — fixtures.requires asks for an OS_TENANCY_POSTURE=isolated boot, which 18.0 refuses at boot by design (serve.ts walledPostureRefusal: 18.0 supports 'single' only). The item cannot be live-run against an 18.0 server; its live clauses should be re-scoped to the single control or marked planned for the 18.x that lifts the…
    • access-security.walled-environment-metadata-operator-only — step 4 control: a minimal object body needs sharingModel or the save is refused 400 security-owd-unset
    • ai.mcp-stdio-fail-closed — tools/list on the stdio transport names the run_action-free data tool set (9 tools incl. aggregate_records) — aggregate clauses runnable on this boot (knownGap not triggered)
    • api-backend.query-contract-matrix — $select narrows to exactly the requested keys — no system identity keys (not even id) are added; step 5 says "plus system identity keys", which this build does not do (harmless, but the expectation text is looser than the behaviour)
    • api-backend.packaged-action-disabled-dispatch — MCP run_action argument is actionName, not action (an action key is refused -32602 with a did-you-mean); step 6 does not name the argument
    • approvals.account-app-entry — acceptance[6].verify says pick '中文(中国)' (zh-CN) and that the picker offers no bare zh entry; at this pin the INTERFACE picker (login-page globe menu) lists '中文' and sets html lang 'zh'; '中文(中国)' appears only in Profile → Preferred language, which the page itself says is the notification language, not the interface lan…
    • approvals.account-app-entry — Persona is both submitter and finance approver of its own invoice; self-approval was permitted (can_act true). Item does not say whether that is intended — noted, not judged.
    • automation.packaged-flow-disable-durable — GET /automation/‹flow>/runs caps limit at 100 (limit=200 → 400 VALIDATION_FAILED); not mentioned in steps
    • cli.dev-boot-contract — Exit codes measured: plain dev SIGINT → 0 (×9), --fresh SIGINT → 130, no-config → 1, flag refusal → 2 — all as steps[8] states
    • cli.organization-ownership-ceremony — ITEM STALE vs subject 5b14b7f: 18.0 deliberately ships os migrate organization-ownership as a NOT_IMPLEMENTED refusal (fresh-installs-only ruling 6259608309; packages/cli/src/commands/migrate/organization-ownership.ts ORGANIZATION_OWNERSHIP_UPGRADE_UNAVAILABLE). Clauses 1,2,4 and the checkpoint half of 3 describe a…
    • cli.organization-ownership-ceremony — os migrate comment-reactions --apply still runs in 18.0 (not withdrawn): on cr.db with 2 planted sys_comment rows → run1 '2 converted', 1 not-JSON value listed, exit 1 (column cannot be dropped until every value reads); run2 '2 already converted, 0 converted' (idempotent), sys_comment_reaction holds 2 rows (dup user…
    • integration-system.datasource-credential-refusal-matrix — driver id mongo is retired in spec 18 (build refuses it naming mongodb); probes must use driver: "mongodb"
    • platform-core.builtin-apps-nav-render — steps[5]/history say 45 Setup destinations (re-measured 2026-10-01); this boot serves 42 Setup leaves (8 Account matches). Item says recount each run — recorded 42.
    • platform-core.v18-boot-refusals — step 1 says os serve … -d file:COPY.db: serve has no -d flag (INVOCATION ERROR — Nonexistent flag: -d); use OS_DATABASE_URL (or os start -d/os dev -d).
    • platform-core.v18-boot-refusals — clause 2 'checksum before == after' is insufficient in WAL mode: the 18.x driver leaves changes in COPY.db-wal, so the main file can hash identical while the DB differs — compare a logical dump or checkpoint first.
    • platform-core.v18-boot-refusals — step 2 os dev with DevPlugin services:{auth:false}: (a) defineStack refuses a DevPlugin instance under devPlugins (manifest shape), (b) under plugins it double-registers 'storage' inside os dev, (c) an os dev stack with no auth tier is refused earlier by the no-auth data-API refusal. The AuthzIdentityObjectsMissingE…
    • platform-core.v18-boot-refusals — the refusal code ORGANIZATION_OWNERSHIP_MIGRATION_REQUIRED is not in the CLI output; the clause should match the message (tables + command) rather than the code literal.
    • records-forms.crud-roundtrip — steps[2]/clause 0: the New form submits sales_region:'amer' (its default) even though the step fills only name/industry/status — expect that key in the POST payload.
    • studio-authoring.first-run-loop — steps[3] quotes the publish toast as 'Published all drafts in this package (one atomic release)'; at this pin it reads 'Published 1 item in this package (one atomic release)' and the panel button is 'Publish all'.
    • studio-authoring.first-run-loop — steps[2]: the picklist field is not saved until it has ≥1 option ('Not saved yet: the field "Status" needs at least one option') — the add-field step is add → fill options, then the draft save fires.
    • platform-core.serve-composition-v18 (seen from the P0 Tier 1 batch, item is v18) — the verify recipe omits OS_TEST_TIERS=nightly: packages/cli/test/serve-organization-record-page.e2e.test.ts is a nightly-tier file, so the recipe as written prints "FILTER SELECTED NOTHING" for it; with the switch: 1 file, 2 passed.

    Fixture gaps

    • access-security.rls-both-sides — D11 private write-up not available to this runner (known gap)
    • access-security.crud-permission-matrix — clause 5 guest-anchor lane unobservable on stock boot (known gap)
    • access-security.walled-environment-metadata-operator-only — walled posture (group/isolated) is refused at boot on 18.0 by design (serve.ts walledPostureRefusal, no escape hatch) — every walled clause is unrunnable on a live server in this release; only the kernel-level pins (bootStack) exercise it
    • cli.organization-ownership-ceremony — no v17 DB fixture in the tree: minted one from npm @objectstack/cli@17.7.0 (npm install fails with arborist 'edgesOut' null; pnpm add --ignore-workspace works)
    • integration-system.datasource-credential-refusal-matrix — acceptance[1] and [6] connect halves still need a reachable credential-protected postgres/mysql/mongo (unchanged knownGap)
    • platform-core.builtin-apps-nav-render — Browse Marketplace catalog content: blocked(environment) — cloud registry egress denied (502 MARKETPLACE_PROXY_FAILED 'fetch failed'), per knownGap
    • platform-core.v18-boot-refusals — no v17-shaped SQLite fixture in the tree; minted from npm @objectstack/cli@17.7.0 via pnpm add --ignore-workspace (npm install fails: arborist 'edgesOut' null)

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out

    Every fail in this record has its four-way disposition (checklist-test SKILL §5):

    Extracted: #24567 · platform-core.v18-boot-refusals · acceptance[2]
    Extracted: #24566 · cli.organization-ownership-ceremony · acceptance[3]
    

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out correction

    The filing rules for this wave cap a session at three standalone defect cards. The earlier close-out's two cards from this record are now one family card; #24566 is closed as folded into it.

    Extracted: #24567 · platform-core.v18-boot-refusals · acceptance[2]
    Extracted: #24567 · cli.organization-ownership-ceremony · acceptance[3]
    

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

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


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Closure complete (checklist-test §5): every FAIL in this record has a disposition (the Extracted: / Parked-on: lines above), and its partial coverage gaps and not-run handover are parked on #24579.
    Closed by: the 18.0 QA wave dispatch session session_01CfRDy7SuTfUqaTu2AEH2Hi, on the maintainer's instruction there on 2026-10-19, verbatim 「qa-run的卡片处理完的是不是可以关闭」.


    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