Skip to content

QA run · since:v18 (48/48) · 5b14b7f3 · 2026-10-19 · 38 PASS / 7 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #24558

Closed

Description

@objectstack-fleet

QA run record for selector since:v18 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 + 9 runner subagents (default judgment tier) in parallel, plus independent RUNNER rule 7 verifiers

Scope

Selector since:v18 resolved with node scripts/checklist-select.mjs since:v18 --json → 48 runnable items; 0 planned items matched. Item · revision · derived verdict:

item rev verdict
access-security.anonymous-floor-v18-doors 1 PASS
access-security.walled-environment-metadata-operator-only 1 PARTIAL
access-security.meta-authoring-trail-and-audience-gates 1 PASS
access-security.security-catalog-activation-and-clone-doors 1 PASS
access-security.security-catalog-one-holder-and-boot-report 1 FAIL
access-security.grant-table-write-contract 1 PARTIAL
access-security.parent-and-organization-write-guards 1 PARTIAL
access-security.deployment-tables-platform-only 1 PASS
access-security.share-link-combined-gates 1 PASS
ai.mcp-coded-refusals-and-runtime-exposure 1 PASS
api-backend.second-object-exposure-and-internal-fields 1 PASS
api-backend.data-request-shape-and-query-arity 1 PASS
api-backend.meta-read-doors-v18 1 PASS
api-backend.error-sentences-and-unique-violation-wire-code 1 FAIL
approvals.request-page-reply-and-reader-visibility 1 PASS
approvals.act-door-and-admin-rescue-slate 1 PASS
attachments-storage.upload-limits-scope-and-ownership 1 PASS
attachments-storage.chunked-upload-integrity 1 PARTIAL
automation.flow-registration-verdict-on-read 1 PASS
automation.flow-authoring-refusals-v18 1 PASS
automation.flow-run-semantics-v18 1 PASS
automation.inbound-hook-timestamped-signature 1 PASS
automation.scheduled-work-opt-in 1 PASS
cli.migrate-meta-write-stored-and-all 1 PASS
cli.organization-ownership-ceremony 1 PARTIAL
cli.meta-package-flags-and-explain 1 PASS
cli.validate-v18-authoring-verdicts 1 PASS
cli.verify-derived-proof-families 1 PASS
dashboards.analytics-exposure-gate-and-measure-aggregate 1 PASS
i18n.flow-copy-translation-and-host-override 1 PASS
identity-auth.auth-gate-held-session-raw-host-families 1 PASS
identity-auth.api-key-expiry-lifecycle 1 PASS
identity-auth.cookie-session-renewal-in-process 1 PASS
identity-auth.default-organization-boot-invariant 1 PASS
identity-auth.import-invitation-and-sso-domain-answers 1 PASS
integration-system.inbound-mailbox-association 1 PARTIAL
integration-system.notification-org-and-redeliver-eligibility 1 PASS
platform-core.v18-boot-refusals 1 FAIL
platform-core.protocol-18-handshake-and-stored-replay 1 PASS
platform-core.settings-organization-isolation-and-platform-rung 1 PARTIAL
platform-core.serve-composition-v18 1 PASS
records-forms.write-time-option-and-element-shape-judgement 1 PASS
records-forms.write-answer-advisories-rollback-and-tree-delete 1 PASS
records-forms.comment-reactions-and-edit-stamps 1 PASS
records-forms.v18-semantic-defaults 1 PASS
studio-authoring.meta-save-preconditions-and-draft-rows 1 PASS
studio-authoring.multi-package-item-rows 1 PASS
studio-authoring.save-door-runs-authoring-rules 1 PASS

All 48 items carry a pin (Tier 1) and live clauses: clause 0 of each is "the permanent pins pass" (cited from the Tier 1 batch), every other acceptance/negative clause was driven live against its own boot (API/CLI; two mixed items with screenshot clauses against the console built at the pin). The 11 P2 items in this selector are all pinned, so none fell in Tier 3 and nothing was deferred. Pin evidence: 253 framework pin files, 0 failed, 0 zero-test files; one file (packages/cli/test/serve-organization-record-page.e2e.test.ts) is nightly-tier and was run with OS_TEST_TIERS=nightly (2 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.anonymous-floor-v18-doors 0 test pass pin run: 5 pin file(s), 117 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.anonymous-floor-v18-doors 1 api pass anonymous (get-session → 401 UNAUTHENTICATED 'Sign in first'): GET /api/v1/notifications 401 UNAUTHENTICATED; GET /keys 401 UNAUTHENTICATED; PATCH /k…
access-security.anonymous-floor-v18-doors 2 api pass anon GET /api/v1/share-links/BOGUS/resolve → 404 INVALID_OR_EXPIRED 'Share link is invalid, expired, or revoked' (not 401); /BOGUS/messages → 404 NOT…
access-security.anonymous-floor-v18-doors 3 api pass anon POST /api/v1/forms/contact-us/submit {name,email,company,message,owner_id:'FORGED_OWNER',status:'closed'} → 201 body exactly {"id":"TsoWSrayJkwY…
access-security.anonymous-floor-v18-doors N0 api pass no listed door answered anonymous 200 (all 401, token faces 404)
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/objec…
access-security.walled-environment-metadata-operator-only N0 api blocked(fixture: walled posture cannot be booted on 18.0 — … no walled boot possible
access-security.meta-authoring-trail-and-audience-gates 0 test pass pin run: 3 pin file(s), 69 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.meta-authoring-trail-and-audience-gates 1 api pass member qa.member.a (admin/create-user + change-password; get-session positions [org_member, everyone]; /me/permissions systemPermissions ['setup.acce…
access-security.meta-authoring-trail-and-audience-gates 2 api pass view showcase_task.qa_gated_view (config.requiredPermissions ['studio.access']). Admin: list 37 incl. gated; by-name 200, /published 200, /layers 200…
access-security.meta-authoring-trail-and-audience-gates N0 api pass member GET by-name and /published with If-None-Match: "951e419" (admin's ETag; admin gets 304 with it) → 403 PERMISSION_DENIED, never 304
access-security.security-catalog-activation-and-clone-doors 0 test pass pin run: 4 pin file(s), 92 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.security-catalog-activation-and-clone-doors 1 api pass member = demo persona auditor.demo@example.com (get-session usr_showcase_auditor_demo, positions [org_member, auditor, everyone]). Before: /me/permis…
access-security.security-catalog-activation-and-clone-doors 2 api pass position/everyone → 400 VALIDATION_ERROR 'audience anchor … not switchable'; position/guest → 400 VALIDATION_ERROR; position/qa_no_such_position → 40…
access-security.security-catalog-activation-and-clone-doors 3 api pass POST /security/permission-sets/showcase_member_default/clone {name:qa_clone_set,label} → 200 data {permissionSet:{label,name,objects}, notice:'The co…
access-security.security-catalog-one-holder-and-boot-report 0 test pass pin run: 6 pin file(s), 53 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.security-catalog-one-holder-and-boot-report 1 api fail POST /api/v1/marketplace/install-local {manifest:{id:com.qa.conflict, …, permissions:[{name:showcase_member_default}]}} → 422 {success:false,error:{c…
access-security.security-catalog-one-holder-and-boot-report 2 api pass PUT /meta/permission/qa_new_set?package=com.example.showcase body packageId 'com.qa.other' → 400 VALIDATION_ERROR issues[0].path 'packageId' 'Disagre…
access-security.security-catalog-one-holder-and-boot-report 3 build pass planted two env-wide rows (sys_metadata permission showcase_auditor + position auditor, package_id NULL) in a DB copy; `os migrate security-catalog-o…
access-security.security-catalog-one-holder-and-boot-report 4 log pass clean DB reboot (OS_LOG_LEVEL=info): 'INFO [security] catalog reference report: every position assignment, permission-set grant and position definiti…
access-security.grant-table-write-contract 0 test pass pin run: 5 pin file(s), 75 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.grant-table-write-contract 1 api pass admin (get-session admin@objectos.ai): POST /data/sys_user_permission_set {user_id:MEMBER,permission_set:'showcase_manager'} → 201; same again → 409 …
access-security.grant-table-write-contract 2 api pass valid_from 2026-12-01 / valid_until 2026-11-01 → 400 VALIDATION_FAILED fields[0] {field:'valid_until',code:'rule_violation',message:'Valid Until must…
access-security.grant-table-write-contract 3 api pass POST {user_id:MEMBER,permission_set:'showcase_auditor',granted_by:MEMBER} → 201, stored granted_by = qHiRoDgGOYVjCu9OOvMjTzpVIhFl4S3G (the admin call…
access-security.grant-table-write-contract 4 api blocked(fixture: walled posture cannot be booted on 18.0 — … walled boot refused at startup
access-security.parent-and-organization-write-guards 0 test pass pin run: 6 pin file(s), 125 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.parent-and-organization-write-guards 1 api blocked(fixture: walled posture cannot be booted on 18.0 — … walled boot refused at startup
access-security.parent-and-organization-write-guards 2 api pass scratch pair qa_hdr (private OWD) / qa_dtl (public_read_write, required master_detail hdr) + set qa_pair_rw; member qa.cbp (get-session positions [or…
access-security.parent-and-organization-write-guards 3 api pass scratch qa_mst (public_read, admin-owned) / qa_kid2 (controlled_by_parent, enable.files) + set qa_cbp_set (mst/kid rw, sys_attachment+sys_comment ful…
access-security.parent-and-organization-write-guards N0 api pass unreadable and missing header answers identical (both arms: reference_not_found pair; cbp pair 403 identical)
access-security.deployment-tables-platform-only 0 test pass pin run: 2 pin file(s), 25 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.deployment-tables-platform-only 1 api pass org admin qa.orgadmin (create-user, POST /auth/organization/update-member-role role admin → sys_member.role admin; get-session positions [org_admin, …
access-security.deployment-tables-platform-only 2 api pass platform admin GET /data/‹table>?filter=[["organization_id","=","x"]] → 400 INVALID_FIELD field organization_id ('not a field on object …') on all se…
access-security.share-link-combined-gates 0 test pass pin run: 2 pin file(s), 69 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
access-security.share-link-combined-gates 1 api pass link A (showcase_client_brief al3S…, audience signed_in, password 'pässwörd-QA1'); anonymous (get-session 401): /resolve no pw → 401 SIGN_IN_REQUIRED…
access-security.share-link-combined-gates 2 api pass link B (audience email, allowlist [one address], same password), anonymous /resolve: no pw, wrong pw, right pw, right pw + non-allowlisted ?email → a…
access-security.share-link-combined-gates 3 api pass judged on corrected intent (see checklistAccuracy): /messages opens exactly where /resolve opens and refuses exactly where it refuses. Every /resolve…
access-security.share-link-combined-gates N0 api pass password-correct anonymous caller on link A → 401 SIGN_IN_REQUIRED, no record
ai.mcp-coded-refusals-and-runtime-exposure 0 test pass pin run: 3 pin file(s), 23 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
ai.mcp-coded-refusals-and-runtime-exposure 1 api pass MCP HTTP tools/call get_record {objectName:showcase_task, recordId:'no_such_id_qa_b'} → result isError, text {"error":{"code":"RECORD_NOT_FOUND","mes…
ai.mcp-coded-refusals-and-runtime-exposure 2 api pass PUT /meta/object/showcase_qa_rt {sharingModel, fields, enable:{apiEnabled:false}} → 200; MCP HTTP query_records/get_record showcase_qa_rt → {error:{c…
ai.mcp-coded-refusals-and-runtime-exposure 3 api pass member (task read, no edit; REST PATCH → 403) MCP run_action showcase_qa_task_set_notes (planted ai-exposed declarative operation:update) → raw HTTP …
api-backend.second-object-exposure-and-internal-fields 0 test pass pin run: 4 pin file(s), 75 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
api-backend.second-object-exposure-and-internal-fields 1 api pass admin AND member identical: GET /data/showcase_qa_src?filter={"t_ref":{"name":"x"}} → 404 OBJECT_API_DISABLED object=showcase_qa_hidden, message loca…
api-backend.second-object-exposure-and-internal-fields 2 api pass GET /data/showcase_qa_src/ID?expand=t_ref → 200 t_ref:"hid_1" (bare id) for admin and member; list ?$expand=t_ref → t_ref:"hid_1"; control expand=g_r…
api-backend.second-object-exposure-and-internal-fields 3 api pass admin and member: ?filter internal_f → 400 INVALID_FIELD "Cannot filter 'showcase_qa_src' by 'internal_f' (filter): the query was not run…"; ?sort=in…
api-backend.second-object-exposure-and-internal-fields N0 api pass filter-on-internal never answered 200 (400, rows 0) vs unfiltered 200 with 2 rows — no oracle leak
api-backend.data-request-shape-and-query-arity 0 test pass pin run: 6 pin file(s), 183 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
api-backend.data-request-shape-and-query-arity 1 api pass PATCH /data/showcase_task/-OHjzgsTBWkpmSij body null → 400 VALIDATION_FAILED 'Invalid update request'; body [] → 400 VALIDATION_FAILED; body 5 → 400 …
api-backend.data-request-shape-and-query-arity 2 api pass POST /data/showcase_task/query body null → 400 VALIDATION_FAILED 'Invalid query request', 0 rows (unfiltered = 13); control body {} → 200 13 rows
api-backend.data-request-shape-and-query-arity 3 api pass GET /packages?status=a&status=b → 400 VALIDATION_ERROR 'The "status" query parameter was supplied 2 times…'; DELETE /packages/com.example.showcase?ke…
api-backend.data-request-shape-and-query-arity 4 api pass member PATCH /data/showcase_private_note/‹admin's note> with If-Match 2020-01-01T00:00:00.000Z → 404 RECORD_NOT_FOUND, no currentRecord in body; cont…
api-backend.data-request-shape-and-query-arity N0 api pass doubled keepData refused 400 before any work; package and tables remain (see clause 3)
api-backend.meta-read-doors-v18 0 test pass pin run: 7 pin file(s), 115 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
api-backend.meta-read-doors-v18 1 api pass GET /meta/app/com.example.showcase → 200 item.name=showcase_app (_packageId com.example.showcase); GET /meta/app/com.unknown.pkg → 404 {error:{code:R…
api-backend.meta-read-doors-v18 2 api pass after PUT /meta/email_template/showcase_task_done_email (body locale zh-CN) → 200: GET ?member=zh-CN → 200 locale zh-CN subject '任务完成: {{title}}'; ?m…
api-backend.meta-read-doors-v18 3 api pass GET /meta/view?package=all and GET /meta/view → both 200, 36 items, id lists equal and response bodies byte-identical
api-backend.meta-read-doors-v18 4 api pass member holding client_liaison (FLS showcase_project.budget readable:false): GET /meta/object/showcase_project → item.fields has no budget, sortabilit…
api-backend.error-sentences-and-unique-violation-wire-code 0 test pass pin run: 4 pin file(s), 620 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
api-backend.error-sentences-and-unique-violation-wire-code 1 api fail hand-built form door POST /forms/contact-us/submit {company:'LOCK Corp'} → 400 {error:'QA-B: inquiries from locked companies are not accepted.'} (sen…
api-backend.error-sentences-and-unique-violation-wire-code 2 api pass POST /actions/showcase_qa_uniq/showcase_qa_dup_insert (after seeding code DUP) → 409 {error:{code:UNIQUE_VIOLATION,message:"Duplicate record refused …
api-backend.error-sentences-and-unique-violation-wire-code 3 api pass PUT /api/settings/storage {local_root:'/dev/null/qa-b-uploads'} then PUT /storage/_local/raw/‹token> → 500 {error:{code:INTERNAL,message:'Upload fail…
approvals.request-page-reply-and-reader-visibility 0 test pass pin run: 5 pin file(s), 68 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
approvals.request-page-reply-and-reader-visibility 1 api pass GET /meta/page/sys_approval_request_detail → 200 slots.actions [{type:record:approval_decision}], tabs Details + Timeline (record:related_list sys_ap…
approvals.request-page-reply-and-reader-visibility 2 api pass member (get-session lYOH…, non-participant; granted object read on sys_approval_request/sys_approval_action via cloned set qa_ap_set — see fixtureGap…
approvals.request-page-reply-and-reader-visibility 3 api pass ap_doc enable.approvalsVisibleToReaders:true, sharingModel public_read, 2 docs → 2 pending requests (approver: manager=admin). Member (reads doc A 20…
approvals.request-page-reply-and-reader-visibility 4 screenshot pass admin form sign-in (get-session 200 admin@objectos.ai), /_console/apps/com.example.showcase/sys_approval_request/record/areq_d1713c71… after 8 s: dec…
approvals.act-door-and-admin-rescue-slate 0 test pass pin run: 4 pin file(s), 37 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
approvals.act-door-and-admin-rescue-slate 1 api pass live action tokens minted by a submitter remind (POST /approvals/requests/:id/remind; how the runner obtained them is withheld with the authorization…
approvals.act-door-and-admin-rescue-slate 2 api pass position 'manager' unstaffed (DELETE /api/v1/data/sys_user_position/usp_showcase_admin_manager → 0 holders); second org admin orgadmin2 (update-membe…
attachments-storage.upload-limits-scope-and-ownership 0 test pass pin run: 7 pin file(s), 114 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
attachments-storage.upload-limits-scope-and-ownership 1 api pass POST /storage/upload/presigned size 101 MiB → 413 PAYLOAD_TOO_LARGE ('over the maximum upload size of 100 MB'), chunked start same → 413; sys_file co…
attachments-storage.upload-limits-scope-and-ownership 2 api pass presigned and chunked: scope 'avatars' → 400 INVALID_REQUEST "scope 'avatars' is not accepted: it is not an upload scope. The upload scopes are user,…
attachments-storage.upload-limits-scope-and-ownership 3 api pass admin-started uploads: member POST /storage/upload/complete → 403 PERMISSION_DENIED 'Only the user who started this upload can act on it'; member GET…
attachments-storage.upload-limits-scope-and-ownership 4 api pass committed unclaimed private file: anonymous GET /storage/files/ID/url → 401 AUTH_REQUIRED, no Location, no signed URL in body; GET /storage/files/ID …
attachments-storage.upload-limits-scope-and-ownership 5 api pass T1.cover owns file F (sys_file ref_object showcase_task/ref_id T1/ref_field cover); T2.cover planted = F by sqlite; member GET T2 → cover {id:F, meta…
attachments-storage.upload-limits-scope-and-ownership N0 api pass anonymous never received a signed URL (clause 4)
attachments-storage.chunked-upload-integrity 0 test pass pin run: 3 pin file(s), 41 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
attachments-storage.chunked-upload-integrity 1 api pass 3-chunk upload (chunkSize 5 MiB, totalSize 10486760): PUT chunk 0 and 2 → 200; POST complete → 409 RESOURCE_CONFLICT details {totalChunks:3, missingC…
attachments-storage.chunked-upload-integrity 2 api pass re-PUT chunk 0 → 200; progress uploadedChunks 2, uploadedSize 5243880 (unchanged); PUT chunk 1 → uploadedChunks 3; complete → 200. Parallel PUT of 3 …
attachments-storage.chunked-upload-integrity 3 api blocked(environment: 18.0 runs single-organization only — P…
automation.flow-registration-verdict-on-read 0 test pass pin run: 2 pin file(s), 8 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
automation.flow-registration-verdict-on-read 1 api pass PUT /meta/flow/qa_refused_flow (type:'api', start node with no config.secret; hatch logged 'ALLOWING a publish ... [flow-api-trigger-secret-missing]'…
automation.flow-registration-verdict-on-read 2 api pass GET /meta/flow → 200 keys [type, items, registrations]; 33 items / 33 registrations keyed by name; registrations.qa_refused_flow = {state:'refused', …
automation.flow-authoring-refusals-v18 0 test pass pin run: 9 pin file(s), 662 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
automation.flow-authoring-refusals-v18 1 build pass all arms exit 1: value-slot owner:'{record.owner}' → expression-invalid at config.fields.owner, 'Write {record.owner} as' CEL envelope; notify titl…
automation.flow-authoring-refusals-v18 2 api pass PUT /meta/flow/qa_‹arm> → 422 INVALID_METADATA + GET → 404 for: value single-brace, notify title single-brace, screen $x, outputVariable 42, notify b…
automation.flow-authoring-refusals-v18 3 build pass validate exit 0 (valid:true) for: fields.owner {dialect:'cel',source:'record.owner'}; notify title 'Case {{ record.name }}'; get_record filter {owner…
automation.flow-authoring-refusals-v18 N0 build pass no arm validated clean: every arm exited 1 at os validate. (An api-type inbound-hook flow reading record.x validates clean by design — the inbound …
automation.flow-run-semantics-v18 0 test pass pin run: 5 pin file(s), 105 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
automation.flow-run-semantics-v18 1 api pass scratch flow qa_stamp_user2 (record-after-update on showcase_private_note, update_record body := current_user.id) PUT 200 registered; member qa.c.mem…
automation.flow-run-semantics-v18 2 api pass qa_elevated (autolaunched, runAs:'system'): member POST /automation/qa_elevated/trigger → 403 {code:PERMISSION_DENIED, 'This caller may not start thi…
automation.flow-run-semantics-v18 3 log pass qa_decision: decision d with edges ea (cond 1==1, label first) then eb (2==2, label second); POST trigger → output {branch:'A'}; GET /automation/qa_d…
automation.flow-run-semantics-v18 N0 api pass no non-system caller ran the runAs:system flow: 403 + empty run list.
automation.inbound-hook-timestamped-signature 0 test pass pin run: 3 pin file(s), 47 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
automation.inbound-hook-timestamped-signature 1 api pass POST /api/v1/automation/hooks/showcase_inbound_task_webhook/intake with x-objectstack-signature t=‹now>,v1=HMAC(secret,'‹t>.‹body>') → 202 {"accepted…
automation.inbound-hook-timestamped-signature 2 api pass body-only sha256=‹hmac(body)>, valid HMAC with t=now-400s, unknown flow qa_no_such_flow, wrong hook id not_intake → all 401 with byte-identical body …
automation.scheduled-work-opt-in 0 test pass pin run: 2 pin file(s), 22 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
automation.scheduled-work-opt-in 1 log pass default boot banner: 'Flows: 32 flow(s) 19 bound' + 'ℹ 1 flow declares a 'schedule' trigger but is NOT bound — disabled by deployment policy — packag…
automation.scheduled-work-opt-in 2 api pass flag boot banner 'Flows: 32 flow(s) 21 bound'; _status bound:true; runs list → 2 completed runs trigger.type 'schedule' at 13:05:22.677Z and 13:06:22…
cli.migrate-meta-write-stored-and-all 0 test pass pin run: 5 pin file(s), 152 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
cli.migrate-meta-write-stored-and-all 1 build pass sha256 over src/+objectstack.config.ts before os migrate meta --from 17 = dd8b061f…18f4, after = dd8b061f…18f4 (exit 0); git status clean
cli.migrate-meta-write-stored-and-all 2 build pass --from 17 --write --json exit 0: write.status=written, files=[flows/index.ts 3 sites, ops-dashboard 1 site]; diffstat 2 files 4+/4- (refreshInterva…
cli.migrate-meta-write-stored-and-all 3 build pass minimal stack (no jobs/agents): default run prints '21 more manual change(s) not listed: their surfaces are absent from this stack (run with --all to…
cli.migrate-meta-write-stored-and-all 4 build pass os migrate meta --stored --json --database-url file:stored.db: scanned 3, canonical 1, pending 1 (qa_planted_page: page-template-full-width-to-defa…
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 …
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 eac…
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-d…
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…
cli.meta-package-flags-and-explain 0 test pass pin run: 5 pin file(s), 65 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
cli.meta-package-flags-and-explain 1 build pass meta register view --data qa_view.json --package com.example.showcase → server log 'PUT …/api/v1/meta/view/showcase_project.qa_view?package=com.exa…
cli.meta-package-flags-and-explain 2 build pass register object qa_widget{title,qty} --package com.qa.p18 ✓; re-register without qty → exit 1, server 409 DESTRUCTIVE_CHANGE 'Field 'qty' removed…' +…
cli.meta-package-flags-and-explain 3 build pass explain field-no-consumers exit 0 (7 paragraphs); --json exit 0 {rule:'field-no-consumers', covers:'what counts as a consumer', paragraphs:[7]}; …
cli.validate-v18-authoring-verdicts 0 test pass pin run: 7 pin file(s), 319 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
cli.validate-v18-authoring-verdicts 1 build pass seed created_atx: validate 1 / build 2 — "defineSeed('showcase_account'): … records[0]: created_atx is not a field of showcase_account. Did you m…
cli.validate-v18-authoring-verdicts 2 build pass controls: seed key created_at → validate 0 / build 0; condition record.name == "record.typo" → 0/0; email:{provider:'smtp'} → 0/0 (base human run pri…
cli.verify-derived-proof-families 0 test pass pin run: 5 pin file(s), 15 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
cli.verify-derived-proof-families 1 build pass all exit 0, top-level hardFailures 0, report key present: referenceShapes {fields 24, proven 8, holes 0, failed 0, hardFailures 0}; deleteBehaviors {…
cli.verify-derived-proof-families 2 build pass planted contact.account deleteBehavior:'cascade' + a beforeDelete hook on showcase_account that nulls contacts.account (the pin's negative-control sh…
dashboards.analytics-exposure-gate-and-measure-aggregate 0 test pass pin run: 4 pin file(s), 66 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
dashboards.analytics-exposure-gate-and-measure-aggregate 1 api pass admin and member: POST /analytics/query {cube:'showcase_qa_hidden'} (object-inferred cube) → 404 OBJECT_API_DISABLED; inline dataset over showcase_qa…
dashboards.analytics-exposure-gate-and-measure-aggregate 2 log pass boot log: WARN [Analytics] Failed to register cube "showcase_qa_hidden_cube": … reads the object "showcase_qa_hidden", whose `enable.apiEnabled: fals…
dashboards.analytics-exposure-gate-and-measure-aggregate 3 api pass POST /analytics/dataset/query {datasetName:'sys_user_metrics',selection:{measures:['user_count']}} → fields [{name:user_count,type:number,label:Users…
i18n.flow-copy-translation-and-host-override 0 test pass pin run: 5 pin file(s), 184 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
i18n.flow-copy-translation-and-host-override 1 api pass POST /automation/qa_i18n_refuse/trigger {who:'Acme'} Accept-Language zh-CN → status refused, refusalMessage '已拒绝:Acme 是已确认的重复记录' (en → 'Refused: Acme…
i18n.flow-copy-translation-and-host-override 2 build pass os i18n extract --locales en,zh-CN --no-objects-only --no-metadata-forms diff before/after adding the flows: +flows.qa_i18n_refuse.refusals.finish.…
i18n.flow-copy-translation-and-host-override 3 build pass zh-CN screens.ask.title 'Hi {name}' → validate exit 1 STACK_SCHEMA_INVALID at translations.1.zh-CN.flows.qa_i18n_screen.screens.ask.title: 'A flow te…
i18n.flow-copy-translation-and-host-override 4 api pass GET /meta/object/sys_user Accept-Language zh-CN → label 'QA宿主用户' (host bundle; platform zh-CN ships '用户'), pluralLabel '用户' (platform, not overridden…
identity-auth.auth-gate-held-session-raw-host-families 0 test pass pin run: 11 pin file(s), 228 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
identity-auth.auth-gate-held-session-raw-host-families 1 api pass held member1 (get-session authGate PASSWORD_RESET_REQUIRED, both halves): cookie AND bearer each → 403 PASSWORD_RESET_REQUIRED on GET /api/settings/b…
identity-auth.auth-gate-held-session-raw-host-families 2 api pass after member changed password (unheld), admin POST /api/v1/auth/admin/set-user-password {userId, newPassword, revokeSessionsAndKeys:false} → 200 must…
identity-auth.auth-gate-held-session-raw-host-families 3 api pass member key osk_uJXNV20X… (minted unheld, POST /api/v1/keys 201). mfa_required=true, grace 0 → x-api-key GET /api/v1/data/showcase_task: first call 20…
identity-auth.auth-gate-held-session-raw-host-families N0 api pass anonymous on the six families → 401 (UNAUTHENTICATED ×5, presigned 401 AUTH_REQUIRED), never a 403 gate code; unheld admin never saw a gate code (see…
identity-auth.api-key-expiry-lifecycle 0 test pass pin run: 3 pin file(s), 21 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
identity-auth.api-key-expiry-lifecycle 1 api pass server Date 2026-10-19T13:08:38Z (= runner clock); POST /api/v1/keys {name:'k-default'} → 201 expires_at 2027-01-17T13:08:38.466Z = exactly 90 days a…
identity-auth.api-key-expiry-lifecycle 2 api pass POST /api/v1/keys with expires_at +400d → 400 API_KEY_EXPIRY_TOO_LONG ('an API key lives at most 365 days… latest expiry … 2027-10-19T13:08:38.591Z')…
identity-auth.api-key-expiry-lifecycle 3 api pass k-default 200 on GET /api/v1/data/showcase_task → PATCH /api/v1/data/sys_api_key/_pEJkRuPxvqvixSP {revoked:true} (the revoke_api_key action's target)…
identity-auth.cookie-session-renewal-in-process 0 test pass pin run: 2 pin file(s), 14 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
identity-auth.cookie-session-renewal-in-process 1 api pass session 3CjvfCBc… aged in scratch DB (expires_at 2026-10-24T13:09:51.543Z, updated_at 2026-10-17 → past 1-day updateAge). Cookie-only GET /api/v1/dat…
identity-auth.cookie-session-renewal-in-process 2 api pass cookie GET /api/v1/auth/get-session at 13:10:13 → 200 with set-cookie better-auth.session_token=… Max-Age=604800 + set-auth-token; expires_at moved t…
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 t…
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 must…
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_mvf9n…
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,…
identity-auth.import-invitation-and-sso-domain-answers 0 test pass pin run: 3 pin file(s), 55 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
identity-auth.import-invitation-and-sso-domain-answers 1 log pass POST /api/v1/auth/admin/import-users {format:json, mode:insert, passwordPolicy:auto, rows:[{invitee1@example.com}]} → 200 rows[0].delivery 'email'. C…
identity-auth.import-invitation-and-sso-domain-answers 2 api pass invite link GET /api/v1/auth/reset-password/XdPK…?callbackURL=…/_console/reset-password → 302 Location http://localhost:41504/_console/reset-password…
identity-auth.import-invitation-and-sso-domain-answers 3 api pass admin POST /api/v1/auth/admin/sso/request-domain-verification {providerId:'no-such-provider-e'}: boot OS_SSO_ENABLED=1+OS_SSO_DOMAIN_VERIFICATION=1 →…
integration-system.inbound-mailbox-association 0 test pass pin run: 5 pin file(s), 52 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
integration-system.inbound-mailbox-association 1 api blocked(fixture: no IMAP mailbox source — the showcase `req… stock boot composes MailboxServicePlugin (plugin list) and serves GET /data/sys_mailbox|sys_mail_message|sys_mail_association → 200 total 0; nothin…
integration-system.inbound-mailbox-association 2 api blocked(fixture: same — no IMAP source to ingest a message …
integration-system.inbound-mailbox-association 3 api blocked(fixture: same — no unmatched message can be ingeste…
integration-system.notification-org-and-redeliver-eligibility 0 test pass pin run: 4 pin file(s), 108 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
integration-system.notification-org-and-redeliver-eligibility 1 api pass system-context producers: scratch qa_sys_notify (runAs:'system', record-after-update on showcase_private_note) and the schedule tick of showcase_sche…
integration-system.notification-org-and-redeliver-eligibility 2 api pass member qa.c.member2 POST /notifications/read {ids:['-DspbYxIk93ZrZ5q' (admin's)]} → 200 {readCount:0}; sys_notification_receipt rows for that id befo…
integration-system.notification-org-and-redeliver-eligibility 3 api pass webhook qa_wh (created via /data/sys_webhook, url → local sink) delivery 66648644… status success (sink got 1 POST); webhook deactivated → POST /webh…
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…
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…
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… mo…
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 DD…
platform-core.protocol-18-handshake-and-stored-replay 0 test pass pin run: 5 pin file(s), 98 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
platform-core.protocol-18-handshake-and-stored-replay 1 api pass POST /api/v1/packages {manifest:{id:'com.qa.p17',…,engines:{protocol:'^17'}}} → 422 {code:'OS_PROTOCOL_INCOMPATIBLE', message:'…targets protocol ^17 …
platform-core.protocol-18-handshake-and-stored-replay 2 api pass page qa_planted_page saved via PUT (template 'default'), then its sys_metadata.metadata rewritten in sqlite to template:'full-width' and server reboo…
platform-core.protocol-18-handshake-and-stored-replay 3 log pass ^18 artifact with objects[0].indexes[0].unique:true and pages[0].template:'full-width' boots (health 200) with exactly 2 warns: "…declares the first …
platform-core.settings-organization-isolation-and-platform-rung 0 test pass pin run: 4 pin file(s), 80 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
platform-core.settings-organization-isolation-and-platform-rung 1 api pass boot 'Tenancy: single'. admin PUT /api/settings/auth {password_min_length:11} → 200 source 'global'; GET /api/v1/data/sys_platform_setting → 200 rows…
platform-core.settings-organization-isolation-and-platform-rung 2 api blocked(environment: the walled posture cannot boot on 18.0) OS_TENANCY_POSTURE=isolated → boot FATAL 'tenancy posture 'isolated' is not supported in 18.0 (NOT_IMPLEMENTED). Refusing to boot. 18.0 supports the …
platform-core.settings-organization-isolation-and-platform-rung 3 api blocked(environment: walled-only clause; 18.0 refuses the w… walled boot refused (see clause 2). Single-posture control: admin session with activeOrganizationId null (POST /auth/organization/set-active {organiz…
platform-core.serve-composition-v18 0 test pass pin run: 6 pin file(s), 41 tests, 0 failed (vitest @ 5b14b7f; serve-organization-record-page.e2e.test.ts is nightly-tier: run with OS_TEST_TIERS=nig…
platform-core.serve-composition-v18 1 api pass pin's ROW4 config (manifest.id com.example.acme.release, packages[] svc+app, top-level noteObj+noteView): exactly 1 boot line "WARN [AppPlugin] confi…
platform-core.serve-composition-v18 2 log pass app with pages:[{name:'orgpage_organization_detail', type:'record', object:'sys_organization', isDefault:true}] reaches 'Press Ctrl+C to stop', 0 'DE…
platform-core.serve-composition-v18 3 log pass host config (instantiated plugin) with datasources:[primary sqlite ./ds-primary.db] + datasourceMapping:[{default:true, datasource:'primary'}], OS_DA…
platform-core.serve-composition-v18 4 log pass NODE_ENV=production host config, no OS_DATABASE_URL, no driver → exit 1: remedies '• set OS_DATABASE_URL (…)', '• mount a storage driver in the stack…
platform-core.serve-composition-v18 5 api pass GET /_console/ → 503 'The ObjectStack Console is not built, so this server has no Console to serve at /_console/.\n\nConsole dist not found — the Con…
records-forms.write-time-option-and-element-shape-judgement 0 test pass pin run: 7 pin file(s), 155 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
records-forms.write-time-option-and-element-shape-judgement 1 api pass wt_probe.tier option gold visibleWhen 'sqrt(record.amount) > 1' stored (boot log: 'OS_ALLOW_UNLINTED_METADATA_WRITES=1 — ALLOWING a publish of object…
records-forms.write-time-option-and-element-shape-judgement 2 api pass POST /data/wt_probe/import {format:json, rows:[{name:imp-green,amount:4,color:green}], createMissingOptions:true, dryRun:true} → 200 ok:1 results[0] …
records-forms.write-time-option-and-element-shape-judgement 3 api pass note.requiredWhen 'record.amount > 10'. Matched row std2 (amount 4, note null): import writeMode update matchFields [name] row {name:std2, amount:20}…
records-forms.write-time-option-and-element-shape-judgement 4 api pass wt_probe.accounts (lookup showcase_account, multiple:true): POST accounts [{id:x}] → 400 VALIDATION_FAILED fields[0] code invalid_type detail 'at ind…
records-forms.write-answer-advisories-rollback-and-tree-delete 0 test pass pin run: 5 pin file(s), 96 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
records-forms.write-answer-advisories-rollback-and-tree-delete 1 api pass PATCH /data/showcase_project/EVc_Xa86h7zmPyIa {health:red} (was green) → 200 keys [object,id,record,warnings], warnings=[{rule:project_health_progres…
records-forms.write-answer-advisories-rollback-and-tree-delete 2 api pass object ad_abort + hook ad_abort_after_insert (afterInsert, js body throws, onError abort): list count 0; POST /data/ad_abort → 400 {error:'qa after-i…
records-forms.write-answer-advisories-rollback-and-tree-delete 3 api pass referenceless tree field parent (served {type:tree,deleteBehavior}, no reference) per object; root→child1,child2; child1→grand. set_null: DELETE root…
records-forms.write-answer-advisories-rollback-and-tree-delete N0 api pass aborted afterInsert row never readable: list 0 and name filter total 0 after each refused POST
records-forms.comment-reactions-and-edit-stamps 0 test pass pin run: 5 pin file(s), 43 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
records-forms.comment-reactions-and-edit-stamps 1 api pass member (get-session YDrp…, positions [org_member,everyone], sets +qa_comment_set) POST /data/sys_comment_reaction {comment_id:c1,emoji:👍,user_id:ADM…
records-forms.comment-reactions-and-edit-stamps 2 api pass PATCH /data/sys_comment/c1 {reactions:[…]} → 400 INVALID_FIELD field=reactions; POST with reactions → 400 INVALID_FIELD; GET ?filter={reactions:x} an…
records-forms.comment-reactions-and-edit-stamps 3 api pass before: is_edited=false edited_at=null; admin PATCH {body:'…(edited)', is_edited:false, edited_at:'2000-01-01'} → 200; read-back is_edited=true edite…
records-forms.v18-semantic-defaults 0 test pass pin run: 3 pin file(s), 487 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
records-forms.v18-semantic-defaults 1 dom pass 60 scratch tasks seeded (total 70); view showcase_task.default ('All Tasks') serves no pagination / userActions. Admin /_console/apps/com.example.sho…
records-forms.v18-semantic-defaults 2 screenshot pass All Tasks (no editInline, no inlineEdit). Updater qa.updater (positions org_member+contributor, task allowEdit, PATCH on an assigned task 200): Displ…
records-forms.v18-semantic-defaults 3 screenshot pass admin New on showcase_field_zoo (48 fields), URL ?form=new: desktop 1440×900 — centred 'Create Field Zoo' dialog with dimmed shell around it, boundin…
studio-authoring.meta-save-preconditions-and-draft-rows 0 test pass pin run: 5 pin file(s), 73 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
studio-authoring.meta-save-preconditions-and-draft-rows 1 api pass PUT /meta/view/showcase_task.qa_occ_view?mode=draft (body of in_progress) → 200 seq1; GET ?state=draft → 200 keys [type,name,item,version,draftChange…
studio-authoring.meta-save-preconditions-and-draft-rows 2 api pass PUT ?mode=draft label 'QA Draft Label Changed' → 200; GET /meta/_drafts row {type:view,name:showcase_task.qa_occ_view,label:'QA Draft Label Changed',…
studio-authoring.meta-save-preconditions-and-draft-rows 3 api pass admin id (get-session) uy430eE8D9BIp2GaSLA84B2PrKkunHQf; GET …/history events seq1-4 all actor=uy430e… source protocol.saveMetaItem; GET /data/sys_me…
studio-authoring.multi-package-item-rows 0 test pass pin run: 9 pin file(s), 126 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
studio-authoring.multi-package-item-rows 1 api pass POST /packages com.qa.pkga/pkgb → 201 source:authored; PUT view showcase_task.qa_shared_view ?package=A ('Shared A') and ?package=B ('Shared B') → 20…
studio-authoring.multi-package-item-rows 2 api pass (on corrected fixture, see checklistAccuracy) PUT /meta/object/qa_owned_obj?package=com.qa.pkga {sharingModel:private} → 200; PUT same ?package=com.q…
studio-authoring.multi-package-item-rows 3 api pass PUT /meta/object/showcase_task (unpinned publish, If-None-Match:*, ?mode=draft, and ?package=com.qa.pkga) → each 403 NOT_OVERRIDABLE error="'object/s…
studio-authoring.multi-package-item-rows 4 api pass pkge: draft view qa_rev2_board 'Board v1' → POST /packages/com.qa.pkge/publish-drafts 200 publishedCount 1; draft 'Board v2 (draft)' + draft-only qa_…
studio-authoring.save-door-runs-authoring-rules 0 test pass pin run: 8 pin file(s), 277 tests, 0 failed (vitest --maxWorkers=1 @ 5b14b7f)
studio-authoring.save-door-runs-authoring-rules 1 api pass PUT page qa_props_page (page:header properties.titel) → 422 INVALID_METADATA rule component-props-unknown-key path pages[0].regions[0].components[0].…
studio-authoring.save-door-runs-authoring-rules 2 api pass 422 issue message: 'titel is not a prop page:header declares … Did you mean titel → title?' hint 'Remove titel, or declare it on `page:head…
studio-authoring.save-door-runs-authoring-rules 3 api pass PUT /meta/object/qa_pred_obj?package=com.qa.sd&mode=draft (same bad body) → 200 state draft, sys_metadata [(com.qa.sd,draft)]; POST /meta/object/qa_p…
studio-authoring.save-door-runs-authoring-rules N0 api pass no refused body readable afterwards: page qa_props_page / qa_slots_page 404, qa_default_two no rows, view qa_chart_view 404, object qa_pred_obj activ…

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.

access-security.security-catalog-one-holder-and-boot-report · acceptance[1] — FAIL · disposition: assertion defect

Clause: "install-local of a package redeclaring a catalog name → 422 NAMESPACE_CONFLICT (or PLUGIN_REGISTER_FAILED) with conflicts[], and nothing is recorded as installed".

Reproduction rule: boot the showcase from a scratch copy of the app (install-local writes .objectstack/installed-packages/ under the cwd); as admin POST /api/v1/marketplace/install-local with a manifest whose package declares a permission set / position named as one the showcase already ships; expected 422 with conflicts[]; actual 422 {code:"PLUGIN_REGISTER_FAILED", message:"…"} — keys code,message only, the conflicting names and holders appear only inside the message text. Package count 27 → 27, install-local list empty (the "nothing installed" half holds). Reproduced with two different packages.

RUNNER rule 7: re-derived independently — clause literally violated; disposition assertion defect: packages/cloud-connection/src/marketplace-install-local-plugin.ts (~1593–1602) answers its OWN registered PLUGIN_REGISTER_FAILED interpolating only the message, which is that route's documented contract in packages/spec/src/api/error-code-ledger.zod.ts (~999–1003); no pin in the item's automated.ref asserts conflicts[] at this door (the one-holder pin asserts .conflicts on the boot-refusal throw). Re-point the clause to "the message names each conflicting name and holder" (holds). Not release-blocking.

api-backend.error-sentences-and-unique-violation-wire-code · acceptance[1] — FAIL · disposition: product defect

Clause: "the hook refusal answers 400 VALIDATION_ERROR carrying the hook's sentence — not 500".

Reproduction rule: scratch app with an object showcase_qa_uniq (text field code) and a sandboxed beforeInsert hook that throws new Error("QA-B: locked codes cannot be created.") when code starts with LOCK; boot; as admin POST /api/v1/data/showcase_qa_uniq/batch body {"operation":"create","records":[{"data":{"code":"LOCK-9"}}]}. Expected: the hook's sentence, as the same boot gives on POST /api/v1/data/showcase_qa_uniq (400 sentence), /createMany (400 sentence) and /import (row error = sentence). Actual: 200 {success:false, results:[{errors:[{code:"INTERNAL_ERROR", message:"The create of this record failed. The reason is in the server log."}]}]}; server log [Protocol] Withheld a caught error's text from a batch row: the producer declared no client-facing refusal…. Control {"code":"OK-9"} → 200 succeeded:1. Reproduced on two boots. Minor, same clause: a form-submit door answered 400 {error: sentence} with no VALIDATION_ERROR code (not re-verified against the pin's route; noted, not extracted).

RUNNER rule 7: re-derived independently — agrees; disposition product defect: the batch row sink clientFacingRowFailureText (packages/metadata-protocol/src/protocol.ts) discloses text only for a 4xx resolveThrownHttpError and never reads the sandbox's inner business message (the import runner reads it via sandboxBusinessMessage); the item's own ledger pin packages/rest/src/rest-write-route-hook-refusal-sentence.ledger.test.ts lists the batch door under ANSWERS_THE_SENTENCE but passes only because its double rejects protocol.batchData whole — the real per-row catch never throws, so the pin cannot see this. Not release-blocking (withholds text, leaks nothing). Extracted (see close-out comment).

Findings outside authored clauses

  • approvals.act-door-and-admin-rescue-slate — an authorization finding adjacent to the act door (approval action-link credentials). Not an authored clause of the item, so it does not score the item (whose authored clauses pass). Reproduced twice by the runner and confirmed by an independent RUNNER rule 7 re-derivation from the captured evidence and source; the verifier rates it high severity and a candidate 18.0 release blocker. Detail withheld pending maintainer (RUNNER rule 2 carve-out) — the reproduction is with the dispatch session and the maintainer, not on GitHub. Extracted as a withheld card (see close-out comment).

Derived item verdicts

38 PASS / 7 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN. PARTIAL items carry only blocked/skipped clauses besides passes: walled-environment-metadata-operator-only c1, c2, N0, grant-table-write-contract c4, parent-and-organization-write-guards c1 (walled posture: 18.0 refuses to boot OS_TENANCY_POSTURE=isolated NOT_IMPLEMENTED); settings-organization-isolation-and-platform-rung c2, c3 (same — isolated and group both refused); chunked-upload-integrity c3 (org switch: 18.0 refuses a second organization 403 ORGANIZATION_CREATION_DISABLED); cli.organization-ownership-ceremony c1, c2, c4 skipped (the ceremony command is withdrawn in 18.0 — refuses NOT_IMPLEMENTED by ruling); inbound-mailbox-association c1–c3 (no IMAP source or test double in the container — blocked(fixture)). 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. 72 checklist-accuracy findings and 20 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 (since:v18, 5b14b7f). For the wave anchor card; not extracted.

    Checklist-accuracy

    • access-security.anonymous-floor-v18-doors — knownGaps[1] is stale: on this sha an anonymous non-POST /keys (GET, PATCH) answers 401 UNAUTHENTICATED, not 405; the 405 is now only what an authenticated caller gets. DELETE/PUT /keys/:id answer 404 ENDPOINT_NOT_FOUND to anon AND admin alike (route not mounted on HonoServer), so they are not floor doors here
    • 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
    • access-security.meta-authoring-trail-and-audience-gates — for a setup.access-only member the /history door answers 403 FORBIDDEN (trail gate) before the audience gate's PERMISSION_DENIED; the 'every by-name door → PERMISSION_DENIED' clause holds literally only for a caller who passes the trail gate (measured with a manage_metadata member)
    • access-security.security-catalog-activation-and-clone-doors — step 3 'for an unknown name' and the type segment: the activation types are position, permission, sharing_rule — permission_set answers 400 'Path must be /security/_activation/:type/:name'
    • access-security.security-catalog-one-holder-and-boot-report — clause 4's clean-boot info line is only visible with OS_LOG_LEVEL=info (default os dev output shows no [security] report line on a clean boot); the error line prints at error level
    • access-security.grant-table-write-contract — clause 2 names 'constraint.rule validity_window_order': a genuine rule violation carries no constraint object — rule-validator.ts emits constraint{rule,reason:'unevaluable'} only on an unevaluable fault; the pin (sys-user-permission-set-window-order.test.ts) asserts only reason !== 'unevaluable'. Judged on the inten…
    • access-security.parent-and-organization-write-guards — the stock showcase has no non-cbp master-detail whose header a member cannot read (projects are public_read_write); a scratch pair is required for clause 2's reference_not_found arm (on the stock cbp invoice_line the cbp gate answers 403 first, still identical for both ids)
    • access-security.parent-and-organization-write-guards — no stock showcase cbp child has a master the member can read but not edit with files enabled — a scratch pair was authored (object PUT is admitted env-wide on single)
    • access-security.share-link-combined-gates — clause 3 'answers identically … status+code pairs' contradicts the shipped design and its pin: /messages answers every refusal with one generic 404 NOT_FOUND (share-link-routes.ts messages route; runtime share-links-messages-audience.test.ts expects 404 NOT_FOUND / 400 UNSUPPORTED) while /resolve differentiates 401 SI…
    • access-security.share-link-combined-gates — fixture: links must be minted on showcase_client_brief (the only publicSharing-enabled object; status published) — showcase_task answers 422 SHARING_NOT_ENABLED
    • access-security.share-link-combined-gates — step 2 'no matching email session': the email audience has no session concept; its input is the caller-supplied ?email= checked against the allowlist (see authHoleDetail)
    • ai.mcp-coded-refusals-and-runtime-exposure — step 3 'an action the caller may not run': stock showcase AI-exposes only showcase_portfolio_snapshot (system-elevated script, succeeds for a member) and the other actions refuse with 'not exposed to AI' (an uncoded bare message); the PERMISSION_DENIED producer needed a planted ai-exposed declarative update action
    • ai.mcp-coded-refusals-and-runtime-exposure — PUT /meta/object for a runtime object needs sharingModel (422 security-owd-unset otherwise)
    • api-backend.second-object-exposure-and-internal-fields — step 1 dotted path filter [["t_ref.name","=","x"]] is refused 400 INVALID_FIELD as an unsupported dotted path; the relation condition shape is nested: filter={"t_ref":{"name":"x"}} (judged on the corrected shape)
    • api-backend.second-object-exposure-and-internal-fields — step 2 by-id door rejects $expand 400 VALIDATION_ERROR ("Supported parameters: expand, select"); by-id uses expand=, list uses $expand=
    • api-backend.second-object-exposure-and-internal-fields — clause 1 says the refusal names 'where.t_ref'; live message locates it as 'filter.t_ref' (field object=target object)
    • api-backend.data-request-shape-and-query-arity — code is VALIDATION_FAILED on the /data doors (clause 1/2 say so); the dispatcher arity refusal is VALIDATION_ERROR (clause 3) — both as stated
    • api-backend.data-request-shape-and-query-arity — step 5 'a row the member cannot read': showcase_task is public_read_write, so the unreadable row was a showcase_private_note (private OWD) owned by admin
    • api-backend.meta-read-doors-v18 — step 5 names showcase_task, but the showcase declares no FLS on showcase_task; the FLS-denied field is showcase_project.budget for the client_liaison position (showcase_client_liaison set) — judged there
    • api-backend.meta-read-doors-v18 — 'marked unsortable' is realised as the field being absent from sortability.fields (not sortable:false)
    • api-backend.meta-read-doors-v18 — fixtures: showcase ships only an en-US member of showcase_task_done_email; the zh-CN member must be authored (a PUT with body locale zh-CN, no ?member= on PUT)
    • api-backend.error-sentences-and-unique-violation-wire-code — fixture 'a beforeInsert hook on sys_sharing_rule' cannot be authored: compile refuses Hook … references object 'sys_sharing_rule' which is not defined in objects; used hand-built doors over package objects (forms submit, data batch) instead
    • api-backend.error-sentences-and-unique-violation-wire-code — step 3 'malformed adapter config' realised as storage.local_root=/dev/null/… via PUT /api/settings/storage
    • approvals.act-door-and-admin-rescue-slate — Clause 1 / title expect PUT → 405 Allow: GET, POST. Live PUT answers 404 ENDPOINT_NOT_FOUND, and the item's own pin packages/runtime/src/domains/approvals-act.test.ts asserts exactly that the dispatcher domain claims only GET/HEAD/POST and an unclaimed PUT is 'the dispatcher's ordinary miss' (404 ROUTE_NOT_FOUND) with…
    • approvals.act-door-and-admin-rescue-slate — Fixture 'approval email action token (dev mail transport capture)': on a stock boot no approval email is sent; action tokens are minted only by the submitter's remind. The working fixture recipe is withheld with the authorization finding on this item (detail withheld pending maintainer).
    • attachments-storage.upload-limits-scope-and-ownership — step 5 'an id copied from another record' cannot be produced through the REST write doors: POST and PATCH of a record with another record's file id re-mint it into a fresh copy (new sys_file id) for admin and member alike; the copied state needed a direct DB plant (showcase_task.cover = '"‹F>"')
    • attachments-storage.chunked-upload-integrity — clause 1 expects details.missingChunks [2] for 'PUT chunks 1 and 3'; chunk indexes are zero-based, so the run PUT 0 and 2 and the server answered [1] — reword the item to zero-based
    • attachments-storage.chunked-upload-integrity — clause 3's org switch is unreachable on 18.0 (single posture only); the item should be gated to a release carrying walled postures or name the fixture
    • automation.flow-registration-verdict-on-read — fixtures say 'pnpm dev -- --fresh'; a persistent file DB was used so the cold-boot bind could also be observed (no effect on verdict)
    • automation.flow-authoring-refusals-v18 — clause 2 ('the same bodies at PUT /meta/flow → 422') is wrong for the unbound-CEL-root arms (record.x on a flow no entrance hands a record; user.id): the runtime publish gate stands down for that judgement by design and the item's own pin (validate-expressions.flow-cel-root.test.ts) asserts it; PUT answers 200 and the…
    • automation.flow-authoring-refusals-v18 — the job retryPolicy and anonymous-endpoint arms cannot be PUT to /meta/flow: job and api are code-only metadata types (PUT /meta/job|api → 403). The 'nothing stored' intent holds; the clause should say 403-code-only for those arms.
    • automation.flow-authoring-refusals-v18 — 'a REST-triggered flow reading record.x' is ambiguous: a type:'api' inbound-hook flow binds record (validates clean, and needs config.secret else flow-api-trigger-secret-missing); the refused shape is an autolaunched flow with no record entrance started via POST /automation/:name/trigger.
    • automation.flow-authoring-refusals-v18 — the anonymous-endpoint arm also needs an armed rateLimit, otherwise ADR-0121 D6 rate-limit refusal fires beside the D2b one.
    • automation.flow-run-semantics-v18 — step 1 needs a record the member may UPDATE: a minted member gets 403 PERMISSION_DENIED on PATCH showcase_task (it can create one); showcase_private_note (owner-private) was used instead
    • automation.scheduled-work-opt-in — item title says OS_AUTOMATION_SCHEDULED_WORK_ENABLED=true; =1 was used (both truthy per resolveScheduledWorkEnabled)
    • cli.migrate-meta-write-stored-and-all — clause 2 / step 2 expects mechanical edits from 'v17 spellings' like view striped; striped retired in 17.0 so --from 17 does not convert it (stays as a schema refusal). Planting a protocol-18 conversion (dashboard refreshInterval) is what exercises --write.
    • cli.migrate-meta-write-stored-and-all — The showcase itself already carries 3 protocol-18 mechanical sites (flow decision mode inclusive) — a --write on an unplanted showcase copy edits src/automation/flows/index.ts.
    • 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…
    • cli.meta-package-flags-and-explain — step 1 qa_view.json named qa_view cannot be saved: a view ITEM name must be dotted (showcase_project.qa_view, 422 invalid_format), and a container named qa_view on showcase_project is refused 400 (collides with showcase_project.default). Used showcase_project.qa_view.
    • cli.meta-package-flags-and-explain — --package com.example.showcase writes are refused 422 WRITABLE_PACKAGE_REQUIRED (read-only code package) — fine for proving ?package= is sent, but a positive package-addressed save needs a writable package (used com.qa.p18 installed via POST /api/v1/packages).
    • cli.meta-package-flags-and-explain — fixture says pnpm dev -- --fresh; used the canonical file-DB boot instead
    • cli.validate-v18-authoring-verdicts — build exit codes differ by arm (1 for author-time lint rules, 2 for defineStack/define* parse refusals) — both non-zero, clause holds
    • cli.verify-derived-proof-families — step 2 'plant a wrong deleteBehavior' alone does not produce a contradiction (the engine enforces whatever is declared); the planted defect must be a declaration the runtime contradicts — e.g. a hook that undoes the cascade, as the pin does. Hook body API is ctx.api.object(x).find/update({id,…}) with capabilities ['ap…
    • dashboards.analytics-exposure-gate-and-measure-aggregate — clause 1: querying the configured cube over the unexposed object answers 404 CUBE_NOT_FOUND (registration refused it, consistent with clause 2); OBJECT_API_DISABLED is reached by the object's inferred cube or an inline dataset
    • dashboards.analytics-exposure-gate-and-measure-aggregate — step 4: sys_user_metrics has no dimensions, so 'dimension columns carry none' needs a dimensioned dataset (showcase_task_metrics)
    • i18n.flow-copy-translation-and-host-override — step 3: plain os i18n extract defaults to --objects-only and emits NO flow keys; --no-objects-only is required to see refusal/screen/option/toast keys
    • i18n.flow-copy-translation-and-host-override — clause 4 'in either load order' cannot be driven live (one boot = one order); left to the pin
    • identity-auth.auth-gate-held-session-raw-host-families — The fixture's 'API key minted by the member before the hold' cannot be met with the cheap admin/create-user path (the member is held from first sign-in); worked order: create → change-password → mint key → re-hold via set-user-password / policy settings
    • identity-auth.import-invitation-and-sso-domain-answers — fixtures.requires names only OS_SSO_DOMAIN_VERIFICATION toggled per leg; the ON leg also needs OS_SSO_ENABLED=1 — with OS_SSO_DOMAIN_VERIFICATION=1 alone (sso plugin not loaded) the door answers 400 DOMAIN_VERIFICATION_DISABLED (isSsoDomainVerificationEnabled requires isSsoWired; documented in auth-manager.ts). Judged…
    • integration-system.inbound-mailbox-association — knownGaps says 'no in-repo app composes the mailbox service' — the showcase DOES (requires includes 'mailbox'; MailboxServicePlugin loads, sys_mail_* objects served). What is missing is the IMAP sync composition (new MailboxServicePlugin({ imap: { accountFor } })) plus an IMAP double.
    • integration-system.notification-org-and-redeliver-eligibility — fixture 'the showcase outbound webhook (shipped inactive) with one delivery' cannot exist: an inactive webhook is never dispatched, so it has no delivery. Recipe: activate (or create) a webhook pointing at a reachable sink, let a delivery reach success/failed/dead, then deactivate/delete. A still-'pending' row answers…
    • integration-system.notification-org-and-redeliver-eligibility — step 4 (MCP stdio connector cwd) has no acceptance clause beyond the pin clause 0; not driven
    • 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.
    • platform-core.protocol-18-handshake-and-stored-replay — clause 3 artifact had to be hand-crafted (compile output edited) — no 'built before a retirement' artifact fixture exists
    • platform-core.settings-organization-isolation-and-platform-rung — Item requires a second boot with OS_TENANCY_POSTURE=isolated, but 18.0 refuses walled postures at boot (FATAL NOT_IMPLEMENTED for isolated and group). Clauses 2 and 3 cannot run on any 18.0 build — they should move to fixtures.knownGaps / a planned split until walled postures ship (18.x).
    • platform-core.serve-composition-v18 — fixture says 'a datasourceMapping (examples/app-crm declares one)': app-crm no longer declares one (its config comments explain the mapping was removed as decorative); used the pin's fixture shape.
    • platform-core.serve-composition-v18 — leg 5 'boot a tree whose console is not built' cannot be reproduced from a workspace checkout without touching shared dist: resolveConsolePath also resolves from the CLI's own location, and the bin shim's NODE_PATH (/home/user/objectstack/node_modules/.pnpm/node_modules) makes createRequire find the built workspace co…
    • platform-core.serve-composition-v18 — knownGaps note (serve-organization-record-page is .e2e, nightly-only) still holds — orchestrator's concern
    • records-forms.write-answer-advisories-rollback-and-tree-delete — records-forms.validation-rule-type-matrix still describes the warning-severity hit as server-log only; live answer carries warnings[] (already noted on this item's history)
    • records-forms.v18-semantic-defaults — fixtures.knownGaps (pinned objectui does not build) is stale at this subject: the console is built and its stamp matches pin 4016370a, so the browser clauses ran
    • records-forms.v18-semantic-defaults — step 1 'GET /api/v1/meta/view/VIEW and read the resolved pageSize / editInline': the meta read serves the authored view with no pagination or userActions block, so nothing resolved can be read there; the default shows up only in the renderer (top=50, the Edit inline switch)
    • records-forms.v18-semantic-defaults — step 2's affordance is the 'Edit inline' switch in the list's Display popover (per the D3 entry's acceptance text), not a cell editor: on a list that declares neither key, clicking a cell opens the record for every persona until the switch is turned on
    • studio-authoring.multi-package-item-rows — step 3 'PUT /api/v1/meta/object/showcase_task?package=A' cannot reach the OBJECT_OVERLAY_PACKAGE_MISMATCH refusal on stock showcase: showcase_task is code-packaged (com.example.showcase) and sealed, so it answers 403 NOT_OVERRIDABLE first. The 422 needs a Studio-owned object: create qa_owned_obj in package A, then PUT…
    • studio-authoring.multi-package-item-rows — step 5 'publish package A' — POST /packages/:id/publish answers 200 {data:{success:false,itemsPublished:0,validationErrors:['No metadata items found for package …']}} for a Studio package whose items are stored drafts/rows; the revert's 'published version' is created by POST /packages/:id/publish-drafts. The step shou…
    • studio-authoring.save-door-runs-authoring-rules — clause 1 says every refusal carries 'the rule id': the spec-validation refusals (slots pair, chart binding, url target, protection, _lock) carry path + code:'custom' and no rule key — only the lint-gate refusals (component-props-unknown-key, expression-invalid) name a rule id. The pins assert path/code only; the cla…
    • platform-core.serve-composition-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 runs nothing for it ("FILTER SELECTED NOTHING"); with the switch: 1 file, 2 passed.
    • walled-posture clauses (several items) — 18.0 refuses to boot OS_TENANCY_POSTURE=isolated|group; every clause that needs the walled posture cannot be run live on 18.0 and should move to fixtures.knownGaps or a planned split.

    Fixture gaps

    • 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
    • access-security.grant-table-write-contract — 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
    • access-security.parent-and-organization-write-guards — 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
    • ai.mcp-coded-refusals-and-runtime-exposure — no stock ai-exposed action produces PERMISSION_DENIED
    • api-backend.second-object-exposure-and-internal-fields — stock showcase has no apiEnabled:false / apiMethods-whitelisted object, no lookup into one and no internal:true field — scratch app required
    • api-backend.second-object-exposure-and-internal-fields — rows of an apiEnabled:false / get-only object cannot be created through any API door; seeded by direct sqlite insert
    • api-backend.meta-read-doors-v18 — no demo persona holds client_liaison; minted via admin/create-user + sys_user_position binding
    • api-backend.error-sentences-and-unique-violation-wire-code — no showcase hook refuses with a sentence and no unique field + duplicate-inserting action exist on stock showcase — scratch app required
    • approvals.request-page-reply-and-reader-visibility — a stock-showcase org member holds NO object read on sys_approval_request / sys_approval_action, so a non-participant's by-id read is refused 403 PERMISSION_DENIED at the object gate and the row-level 404 / total-exclusion the clause names is unobservable. The item should name how the member gets object read (this run:…
    • attachments-storage.chunked-upload-integrity — no second organization possible on 18.0 for the org-switch leg
    • automation.inbound-hook-timestamped-signature — the accepted run itself failed: 'create_record(showcase_task) failed: Project is required' — the showcase_inbound_task_webhook flow guards project with has() → null but showcase_task.project is required, so a body without project never creates a task (not this item's clause; fixture note)
    • 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)
    • dashboards.analytics-exposure-gate-and-measure-aggregate — stock showcase has no cube over an unexposed object and no internal field — scratch app required
    • i18n.flow-copy-translation-and-host-override — no showcase flow carries a refusing end node; showcase_reassign_wizard's zh screen title exists but the authored screen has no title, so a scratch flow was needed
    • integration-system.inbound-mailbox-association — need: an app/host composing MailboxServicePlugin({imap:{accountFor}}) + a local IMAP double (none ships; python has only an imaplib client) — or an in-process ingest door
    • 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)
    • platform-core.protocol-18-handshake-and-stored-replay — no pre-retirement ^18 artifact fixture; crafted from a compiled minimal app
    • platform-core.settings-organization-isolation-and-platform-rung — walled-posture boot (two orgs A/B with non-platform-admin owners) unavailable on 18.0
    • records-forms.comment-reactions-and-edit-stamps — stock showcase grants a plain org member NO object permission on sys_comment or sys_comment_reaction (/auth/me/permissions objects lacks both; member POST /data/sys_comment_reaction and GET /data/sys_comment → 403 PERMISSION_DENIED). Item fixture should say how the member obtains them; this run cloned showcase_member_…
    • records-forms.v18-semantic-defaults — the updater persona needs task edit rights AND visible rows: contributor's task RLS is assignee == current_user.email, so this run assigned two tasks to the updater (admin PATCH assignee)

    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), and every product defect found during the run is extracted:

    Extracted: #24561 · api-backend.error-sentences-and-unique-violation-wire-code · acceptance[1]
    Extracted: #24564 · approvals.act-door-and-admin-rescue-slate · X1
    Extracted: #24565 · access-security.parent-and-organization-write-guards · side finding
    Extracted: #24566 · cli.organization-ownership-ceremony · acceptance[3]
    Extracted: #24567 · platform-core.v18-boot-refusals · acceptance[2]
    Extracted: #24568 · access-security.security-catalog-one-holder-and-boot-report · acceptance[1]
    

    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. #24566 and #24568 are closed as folded into the family card #24567 (one row per location). Current extraction lines, replacing the earlier list:

    Extracted: #24561 · api-backend.error-sentences-and-unique-violation-wire-code · acceptance[1]
    Extracted: #24564 · approvals.act-door-and-admin-rescue-slate · X1
    Extracted: #24565 · access-security.parent-and-organization-write-guards · side finding
    Extracted: #24567 · platform-core.v18-boot-refusals · acceptance[2]
    Extracted: #24567 · access-security.security-catalog-one-holder-and-boot-report · acceptance[1]
    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