Repository navigation
QA run · since:v18 (48/48) · 5b14b7f3 · 2026-10-19 · 38 PASS / 7 PARTIAL / 3 FAIL / 0 BLOCKED / 0 NOT-RUN #24558
Description
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/objectstackmain), tree clean,pnpm install --frozen-lockfile+pnpm build76/76 green - console:
.objectui-sha=4016370af3c9c9dafec2bc5299afd8e8079701b8, built withpnpm objectui:build;packages/console/dist/.objectui-shastamp equals the pin (pnpm check:console-shagreen), sostale-console-bundleis ruled out for every console observation - app:
examples/app-showcase, bootOS_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 fromexamples/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 FILESinside 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:
- Mint a v17 SQLite: in a scratch dir outside the workspace,
pnpm add --ignore-workspace @objectstack/cli@17.7.0, thenobjectstack start -d file:V17.db --auth-secret <32+ chars>, make one sign-up, stop it. cp V17.db COPY.db; recordsha256sum COPY.dband the schema (sqlite_master,pragma_table_infoper table — read through SQLite so the-walis included).- 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). - 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,
__searchcolumn on 21 sys_* tables,bundle_member/draft_changesonsys_metadata, ~40 indexes, no row content changed; run 2 (one-object stack): main-file sha unchanged but a 259 KB-walheld 2 new tables, 2sys_metadatacolumns, 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 install21 s,pnpm build331 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=2was OOM-killed on@objectstack/dogfoodand@objectstack/objectql; re-run at--maxWorkers=1with 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
objectstack-fleet commentedon Oct 19, 2026
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
position,permission,sharing_rule—permission_setanswers 400 'Path must be /security/_activation/:type/:name'constraintobject — 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…$expand400 VALIDATION_ERROR ("Supported parameters: expand, select"); by-id usesexpand=, list uses$expand=Hook … references object 'sys_sharing_rule' which is not defined in objects; used hand-built doors over package objects (forms submit, data batch) insteadstriped; 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.os migrate organization-ownershipas 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…os migrate comment-reactions --applystill 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…qa_view.jsonnamedqa_viewcannot 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.--package com.example.showcasewrites 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).pnpm dev -- --fresh; used the canonical file-DB boot insteados i18n extractdefaults to --objects-only and emits NO flow keys;--no-objects-onlyis required to see refusal/screen/option/toast keysnew MailboxServicePlugin({ imap: { accountFor } })) plus an IMAP double.os serve … -d file:COPY.db:servehas no -d flag (INVOCATION ERROR — Nonexistent flag: -d); use OS_DATABASE_URL (oros start -d/os dev -d).os devwith 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…rulekey — only the lint-gate refusals (component-props-unknown-key, expression-invalid) name a rule id. The pins assert path/code only; the cla…OS_TEST_TIERS=nightly:packages/cli/test/serve-organization-record-page.e2e.test.tsis a nightly-tier file, so the recipe as written runs nothing for it ("FILTER SELECTED NOTHING"); with the switch: 1 file, 2 passed.OS_TENANCY_POSTURE=isolated|group; every clause that needs the walled posture cannot be run live on 18.0 and should move tofixtures.knownGapsor aplannedsplit.Fixture gaps
projectwith has() → null but showcase_task.project is required, so a body without project never creates a task (not this item's clause; fixture note)npm installfails with arborist 'edgesOut' null;pnpm add --ignore-workspaceworks)pnpm add --ignore-workspace(npm install fails: arborist 'edgesOut' null)Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Close-out
Every
failin this record has its four-way disposition (checklist-test SKILL §5), and every product defect found during the run is extracted:Parked-on:line is written here. Nonot-runitem.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
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:
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
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
objectstack-fleet commentedon Oct 19, 2026
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
docs(qa): 18.0 sweep round 7 — integration-system checklist-accuracy …