Skip to content

QA run · cli (18/22) · 5b14b7f3 · 2026-10-19 · 17 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 4 NOT-RUN #24551

Closed

Description

@objectstack-fleet

Run record for the 18.0 release QA wave (dispatch session session_01CfRDy7SuTfUqaTu2AEH2Hi; maintainer-approved plan B: Tier 1 + Tier 2, Tier 3 deferred). Runner session session_016CErRJhdMYZdRg4pe8iQfD. Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md.

Environment fingerprint

  • framework: 5b14b7f3ad8e2e0786d228772f473d07b36b2477 (pinned; pnpm install --frozen-lockfile + pnpm build, 76/76 tasks green)
  • .objectui-sha: 4016370af3c9c9dafec2bc5299afd8e8079701b8; console built with pnpm objectui:build (shallow clone into .cache/objectui-4016370af3c9), packages/console/dist/.objectui-sha matches, pnpm check:console-sha green
  • resolver: node scripts/checklist-select.mjs area:cli --json → 22 runnable · 0 blocked hidden · 0 planned
  • app: showcase · boot OS_PORT=P objectstack dev --ui --seed-admin -p P -d file:…/ITEM.db · per-runner port range and per-item file DB · seeded admin + demo personas; staged configs only in scratch copies of the app
  • browser: Playwright on /opt/pw-browsers/chromium, headless, one context per persona
  • timestamp: 2026-10-19 (UTC) · execution: parallel fan-out, one sub-agent runner per item group:
    • C1: ports [41320,41321,41322,41323,41324,41325] · env 6 min / test 26 min
    • C2: ports [41330,41331] · env 5 min / test 12 min
    • C3: ports [41340,41341,41342,41343,41344,41348,41349] · env 6 min / test 16 min
    • C4: ports [41350,41351,41352] · env 3 min / test 23 min

Scope

Selector area:cli · 22 runnable item(s) (revision = the one each verdict is valid for):

  • cli.dev-boot-contract r5 · P0 · cli · Tier 2 → pass (runner C1)
  • cli.build-own-contract r5 · P1 · build · Tier 2 → pass (runner C1)
  • cli.migrate-plan-apply-json r4 · P1 · cli · Tier 1 → pass (runner C4)
  • cli.verify-verdict-exit-mapping r1 · P1 · cli · Tier 1 → pass (runner C4)
  • cli.scaffold-first-run r5 · P1 · mixed · Tier 1 → pass (runner C3)
  • cli.qa-suite-execution r6 · P1 · cli · Tier 2 → pass (runner C2)
  • cli.flag-command-error-ux r3 · P2 · cli · Tier 3 → not-run
  • cli.migrate-meta-codemod r5 · P1 · cli · Tier 2 → pass (runner C2)
  • cli.scaffold-console-first-paint r4 · P1 · mixed · Tier 2 → pass (runner C3)
  • cli.doctor-health-report r3 · P1 · cli · Tier 2 → pass (runner C1)
  • cli.doctor-deprecation-scan r3 · P2 · cli · Tier 3 → not-run
  • cli.migrate-duplicates-inventory r7 · P1 · cli · Tier 2 → pass (runner C2)
  • cli.datasource-introspect-codegen r5 · P2 · cli · Tier 1 → pass (runner C3)
  • cli.hook-body-extraction-gates r3 · P1 · cli · Tier 2 → pass (runner C1)
  • cli.lint-severity-exit-contract r1 · P2 · cli · Tier 3 → not-run
  • cli.plugin-manifest-build-contract r3 · P2 · cli · Tier 3 → not-run
  • cli.dev-automigrate-policy r2 · P1 · cli · Tier 1 → pass (runner C3)
  • cli.migrate-meta-write-stored-and-all r1 · P1 · cli · Tier 1 → pass (runner C4)
  • cli.organization-ownership-ceremony r1 · P0 · cli · Tier 1 → fail (runner C4)
  • cli.meta-package-flags-and-explain r1 · P2 · cli · Tier 1 → pass (runner C4)
  • cli.validate-v18-authoring-verdicts r1 · P1 · cli · Tier 1 → pass (runner C4)
  • cli.verify-derived-proof-families r1 · P2 · cli · Tier 1 → pass (runner C4)

Per-clause verdicts

item clause short verdict evidence
cli.dev-boot-contract acc[0] health 200, ready ok, console login page pass canonical boot (examples/app-showcase, -p 41320, -d file:RUNDIR/dev-boot.db) health 200 in 35s; GET /api/v1/ready -› {"success":true,"data":{"status"…
cli.dev-boot-contract acc[1] seeded admin loginable; seed idempotent vs changed password pass boot1 POST /api/v1/auth/sign-in/email admin@objectos.ai/admin123 -› 200 token (user createdAt 12:38:13.534Z); wrong pw control -› 401 INVALID_EMAIL_O…
cli.dev-boot-contract acc[2] DB resolution matrix tier for tier pass Database line per variant: explicit -d file:RUNDIR/dev-boot.db -› same; -d :memory: -› 'Database: :memory:' + Driver SqlDriver(better-sqlite3) -› :me…
cli.dev-boot-contract acc[3] --fresh tempdir isolated and deleted; #5594 carve-out pass '🧪 Fresh OS_HOME: /tmp/objectstack-dev-hiUMrl' + 'Database: file:/tmp/objectstack-dev-hiUMrl/data/objectstack.db'; dir listed (data/objectstack.db, …
cli.dev-boot-contract acc[4] busy port auto-shift reported pass instance B (requested 41320 while A held it) printed '↪ server bound to port 41321 (requested 41320)' and API/MCP URLs on 41321; GET http://localhost…
cli.dev-boot-contract acc[5] stale artifact warned, boot continues pass after touch src/ui/actions/index.ts (12:41) newer than dist/objectstack.json (12:35), boot w/o --compile printed '⚠ dist/objectstack.json is OLDER th…
cli.dev-boot-contract acc[6] no config/no artifact exits 1 with remedy pass empty scratch dir: stdout '✗ Config file not found in …/noconfig', stderr 'Run in a directory with objectstack.config.ts, pass --artifact ‹path|url›…
cli.dev-boot-contract neg[0] no wipe of existing dev DB by default pass probe record edit on the unified default DB survived a nothing-chosen restart (title QA-C1-persist-probe read back); default never :memory:
cli.dev-boot-contract neg[1] retired memory engine refused at every door pass --database-driver memory -› oclif 'Expected --database-driver=memory to be one of: sqlite, sqlite-wasm, postgres, mysql, mongodb, turso' EXIT=2; OS_D…
cli.dev-boot-contract neg[2] legacy dev.db read with notice, no fresh objectstack.db pass scratch project with only .objectstack/data/dev.db: '⚠ Reading legacy database file …/dev.db — dev, start and migrate now share one default, …/object…
cli.dev-boot-contract neg[3] shifted port never silently different pass B's printed URLs and the ↪ line all name 41321, the port that answered health 200
cli.build-own-contract acc[0] clean build exit 0, artifact, stats, json keys pass blank scaffold: EXIT=0, '✓ Build complete', 'Data: 1 Objects 2 Fields … Runtime: 3 plugins', 'Artifact: dist/objectstack.json (2.5 KB)', file parses;…
cli.build-own-contract acc[1] schema violation located; json 1, human 2 pass field body with type removed (plain object literal): human '✗ defineStack validation failed (1 issue): ✗ objects.0.fields.body.type: Invalid field ty…
cli.build-own-contract acc[2] author-time rule failures exit 1, all at once, located pass flow with two approval nodes whose expression approvers don't parse: '✗ Author-time rules failed (2 issues)' each with CEL caret, fix:, 'rule: approv…
cli.build-own-contract acc[3] --json shapes parity with validate pass success: build and validate both carry warnings + conversions; rule failure: build {success:false,error:'author-time rules failed',issues,warnings,co…
cli.build-own-contract acc[4] #4873 exit codes are stable statuses pass clean human 0,0,0,0 / clean json 0,0,0; schema-load human 2,2 / json 1,1; strict:false schema human 1 / json 1; rule human 1,1 / json 1,1; advisory 0…
cli.build-own-contract acc[5] advisory warns and exits 0 pass raw-object field body.visibleWhen {dialect:'cel',source,qaUndeclared:1} under strict:false: '⚠ Undeclared authoring keys (1) — dropped at load; repor…
cli.build-own-contract neg[0] no exit 0 without artifact / nonzero on clean pass every exit-0 run wrote dist/objectstack.json; clean config never nonzero
cli.build-own-contract neg[1] no computed value in exit slot pass see acceptance[4]
cli.build-own-contract neg[2] deep gate content out of scope skipped scope note
cli.migrate-plan-apply-json acc[0] bare migrate is read-only plan pass after adding showcase_category.qa_note + build: two bare runs identical (modulo timestamps), both list '+ showcase_category [add_columns: qa_note]'; …
cli.migrate-plan-apply-json acc[1] plan --json shape, exit 0 pass keys database,databaseSource,managedTables(68),total,changes,pending(8),unmanagedTables,composition,duration; exit 0
cli.migrate-plan-apply-json acc[2] #4873 --json success exits 0 pass plan --json 0, apply --json --yes 0, recorded-by --json 0 {pending:0}, resume --json 0 {interrupted:[],count:0}; pin format.exit-code.test.ts 4 passed
cli.migrate-plan-apply-json acc[3] destructive skipped until --allow-destructive pass field removed + build: apply --yes → '1 destructive change(s) will be SKIPPED (re-run with --allow-destructive …)', column kept; --allow-destructive …
cli.migrate-plan-apply-json acc[4] idempotent re-run, in_sync_partial on showcase pass post-apply plan: '⚠ No drift over the 68 object(s) … 2 of 70 … NOT examined … PARTIAL plan'; apply --json --yes exit 0 {applied:[],skipped:[],created…
cli.migrate-plan-apply-json acc[5] busy DB: apply exit 1, plan warns pass with os dev holding the DB: apply --yes exit 1 '… is in use — it is open in pid 13650 (node) … or pass --force'; plan exit 0 with the same busy warni…
cli.migrate-plan-apply-json acc[6] --json without --yes: confirmation_required pass apply --json → {applied:[],message:'confirmation_required',hint:'pass --yes'}, DB sha unchanged, follow-up plan still pending 8 incl. showcase_catego…
cli.migrate-plan-apply-json neg[0] no drop without --allow-destructive pass qa_note still present after the plain apply
cli.migrate-plan-apply-json neg[1] busy apply never exit 0; json success never nonzero pass busy apply exit 1; all --json successes exit 0
cli.verify-verdict-exit-mapping acc[0] verdict vocabulary closed pass verify --json on showcase: 24 results, statuses {verified:15, needs-fixture:1, skipped:8}, none outside the six-member union; summary reconciles
cli.verify-verdict-exit-mapping acc[1] exit nonzero exactly when hardFailures›0 pass showcase: recomputed 0, hardFailures 0, exit 0; staged scratch app (beforeInsert hook mutating title + hook throwing): fidelity-gaps 1 + create-faile…
cli.verify-verdict-exit-mapping acc[2] needs-fixture excluded; failures counted pass exit-0 showcase run carries showcase_account needs-fixture (400 validation); staged non-validation 400 → create-failed counted (verify.ts:110-113 isV…
cli.verify-verdict-exit-mapping acc[3] --rls separate fresh stack; holes counted pass verify --rls --json exit 0, rls.summary {proven 21, holes 0, unproven 3}; two objectql registrations in the run log vs one for bare verify; verify.ts…
cli.verify-verdict-exit-mapping acc[4] #5262 walled posture never quiet single-org pass OS_TENANCY_POSTURE=isolated verify --json → exit 1 {error:'verify: multiTenant=true requires the enterprise @objectstack/organizations package …'}; p…
cli.verify-verdict-exit-mapping neg[0] no exit 0 with hard failures pass staged gaps run exited 1; banner '✗ verify FAILED — 2 runtime failure(s)'
cli.verify-verdict-exit-mapping neg[1] no quiet single-org under walled posture pass isolated posture errored loudly, no multiTenant:false payload
cli.scaffold-first-run acc[0] scaffold→install→validate→build→boot→health all green pass PRE-RELEASE variant: 73 public workspace pkgs packed at 5b14b7f (ignore-scripts) and published ONLY to localhost verdaccio :41348 (no uplink for @ob…
cli.scaffold-first-run acc[1] every template validates and builds per-variant pass catalog = blank only (src/template-registry.ts one bundled source; src/templates/ holds only blank); blank: validate EXIT=0, build EXIT=0 (pre-releas…
cli.scaffold-first-run acc[2] artifact boots via os start; protocol handshake accepts coherent scaffold pass os start --artifact boot reached '✓ Server is ready', Mode: production, 41 plugins; no '✗ package … targets protocol' refusal — coherent pre-release …
cli.scaffold-first-run acc[3] skills boundary: installed set == catalog, no internal skill pass 18-line scaffolder install (no --skip-skills, qa-skills): .claude/skills = 10 real dirs (0 symlinks) set-equal by unique name to node_modules/@object…
cli.scaffold-first-run acc[4] never-healthy server is a FAIL with server.log, not retry pass bounded probe used exactly as the workflow (30×2s, kill -0 exit check); server became healthy at poll 7 so the timeout arm did not trigger; server.lo…
cli.scaffold-first-run neg[0] internal skill in scaffolded project pass no internal skill in either the scaffolder-installed set or the skills-add set; repo-root discovery listing contains no dogfood-verification
cli.scaffold-first-run neg[1] template builds only from checkout, not registry pass the blank template built from a REGISTRY-shaped install (localhost registry, tarballs) at the pinned sha, not workspace links; published 17.7.0 path …
cli.qa-suite-execution acc[0] green path SUCCESS exit 0 with N›0 pass default glob from examples/app-showcase: 'Found 1 test suites.', '✅ … [health-liveness] (43ms)', '✅ … [category-create-read-roundtrip] (223ms)', 'SUC…
cli.qa-suite-execution acc[1] capture+interpolation address the created record pass no-teardown copy of the roundtrip scenario passed (read-back via {{categoryId}} asserted record.name 'QA C2 idproof'); independent GET /api/v1/data/s…
cli.qa-suite-execution acc[2] false assertion fails scenario and run pass '❌ … [health-degraded]' 'Assertion failed: data.status expected degraded, got ok' under 'Step Failed: GET health expecting degraded'; run exit 1
cli.qa-suite-execution acc[3] unevaluable contains fails with hint pass 'Assertion failed: data.nope cannot be evaluated by 'contains' — expected an array or a string at that path, got undefined. … Use 'is_null' if assert…
cli.qa-suite-execution acc[4] malformed suite refused at load, rest runs, exit 1 pass 'qa/a-malformed.test.json is not a valid Quality Protocol suite (TestSuiteSchema):' '✗ scenarios.0.steps: Invalid input: expected array, received und…
cli.qa-suite-execution acc[5] teardown runs after failure, verdict stays red pass td scenario ❌ 'Step Failed: deliberate failure', exit 1; category listing after = 4 original rows (created 'QA C2 teardown-after-failure' gone)
cli.qa-suite-execution acc[6] 8 action types each with own verdict pass sweep: ✅ v-api_call, v-wait, v-create_record, v-read_record, v-update_record, v-delete_record, v-query_records; ❌ v-run_script 'Unsupported action ty…
cli.qa-suite-execution acc[7] glob discipline default + ** in seconds, sorted pass bare os test found the shipped suite; os test 'qa/**/*.test.json' 'Found 1 test suites.' SUCCESS exit 0 wall 3.86s; staged a/b/c ran in sorted or…
cli.qa-suite-execution neg[0] zero-match glob exits 0 by declared posture pass 'Found 0 test suites.' 'No test files found matching: qa/nothing-matches-*.test.json' 'Exiting 0 — an empty match is not a failure. Pass --fail-on-em…
cli.qa-suite-execution neg[1] malformed suite never reaches runner pass refused at load with file named; no Scenario line for it; no TypeError
cli.qa-suite-execution neg[2] contains over absent path not ✅ pass ❌ with cannot-be-evaluated message
cli.qa-suite-execution neg[3] record action types round-trip, no 404 pass all 5 record-shaped types ✅ against stock boot
cli.qa-suite-execution neg[4] run is against booted app, not unit pins pass all evidence from os test against http://localhost:41330 (showcase dev boot); also no-token persona run: health ✅, roundtrip ❌ 'HTTP Error 401: …UNAU…
cli.migrate-meta-codemod acc[0] every planted spelling listed with registry successor pass --from 17 on planted tree: 'Applied 5 mechanical change(s):' lists 'dashboards[1].refreshIntervalSeconds: refreshInterval → refreshIntervalSeconds (d…
cli.migrate-meta-codemod acc[1] no-write runs leave authored sources byte-identical pass md5 of 161 files before/after 3 no-write runs (plain, --out, --json): identical (list md5 5ebac231… both); only new path ./migrated.stack.json (the -…
cli.migrate-meta-codemod acc[2] --out snapshot = migrated stack, honest verdict pass snapshot: ops dashboard has refreshIntervalSeconds=300 and no refreshInterval, legacy note keys [fields,label,name,sharingModel], 3 decisions mode=in…
cli.migrate-meta-codemod acc[3] canonical replay zero edits; identical runs; empty range pass written tree --from 17: no 'Applied' block, '404 manual change(s) require your judgment', exit 0; two planted-tree runs diff empty after (Nms) normal…
cli.migrate-meta-codemod acc[4] below-floor --from refused loudly pass --from 15 and --from 3: '✗ Cannot migrate from protocol 15: the chain's support floor is 16 (ADR-0087 D3). Upgrade to protocol 16 by another path fir…
cli.migrate-meta-codemod acc[5] semantic entries surface as advisories pass 404 '⚠ [protocol 18] …' entries under '404 manual change(s) require your judgment:' with why/verify lines, separate from the 5 'Applied' lines; --jso…
cli.migrate-meta-codemod acc[6] --json exits 0 on success pass migrate meta --from 17 --json; echo $? → 0 (planted tree); --write --json → 0
cli.migrate-meta-codemod acc[7] --write writes exactly provable edits, re-run held pass 'Wrote 5 of 5 mechanical change(s) into 3 file(s):' sites :1699/:271/:1421 flows/index.ts, :6 legacy-note.object.ts, :59 ops-dashboard.dashboard.ts; …
cli.migrate-meta-codemod neg[0] no prescribed spelling left unlisted pass both sampled tombstones' spellings appear in the Applied block
cli.migrate-meta-codemod neg[1] successor parses pass migrated stack schema-valid with refreshIntervalSeconds; removal has no successor key
cli.migrate-meta-codemod neg[2] no-write run mutates nothing pass md5 pair identical across 3 no-write runs
cli.migrate-meta-codemod neg[3] --write touches nothing outside listed sites pass diff -r shows only the 5 listed sites; no advisory written; refused spread site listed with kind+reason; verification.vanished=[] stillApplied=[]
cli.migrate-meta-codemod neg[4] below-floor never silently exits 0 pass exit 1 + floor message (text and --json)
cli.migrate-meta-codemod neg[5] target-major replay/identical runs agree pass --from 18 = empty-range warning, no changes; identical runs diff empty normalized
cli.migrate-meta-codemod neg[6] no schema-valid claim over outstanding refusals pass pollInterval probe prints the 'does not yet pass' warning and schemaValid=false, not the success line
cli.scaffold-console-first-paint acc[0] npx os validate passes on untouched fresh scaffold pass pre-release scaffold create-objectstack.js qa-console-first-paint (no -t) EXIT=0, lockfile 59/59 integrities == local tarballs; npx os validate E…
cli.scaffold-console-first-paint acc[1] Console paints at /_console/ under os dev --ui pass OS_PORT=41343 npx os dev --ui -p 41343: serve child argv 'serve --dev --port 41343 --ui'; GET /_console/ 200 text/html 18301B; screenshot: login ca…
cli.scaffold-console-first-paint acc[2] npm run dev serves console with no extra flag pass OS_PORT=41343 npm run dev -- -p 41343 → 'objectstack dev -p 41343', serve child argv 'serve --dev --port 41343' (no --ui forwarded); /_console/ 200…
cli.scaffold-console-first-paint acc[3] newcomer can complete documented visual check or run states what stops them pass banner prints '🔑 Dev admin: admin@objectos.ai / admin123 seeded on empty DB'; signed in through the form; from the signed-in console page POST /api/…
cli.scaffold-console-first-paint neg[0] console 404s on fresh scaffold pass /_console/ 200 under both invocations
cli.scaffold-console-first-paint neg[1] npm run dev vs os dev --ui disagree pass both 200, identical HTML, identical rendered flow
cli.scaffold-console-first-paint neg[2] dev gains own ui default false / forwards --no-ui pass bare dev's serve child carries no ui flag and serves the console (serve default ON)
cli.scaffold-console-first-paint neg[3] os validate refusing on pristine scaffold pass EXIT=0
cli.scaffold-console-first-paint neg[4] 200 that paints nothing pass screenshots show rendered login card and home shell, not white
cli.doctor-health-report acc[0] per-check rows; conditional rows only when live pass scaffold plain+(-v): unconditional Node.js/pnpm/TypeScript/Dependencies/Git/Environment files rows present; no @objectstack/spec row (grep 0), Tenanc…
cli.doctor-health-report acc[1] #5387 .env provenance named pass OS_TENANCY_POSTURE=isolatd in .env only (shell unset): '✓ Environment files .env (node_env=production)… — OS_TENANCY_POSTURE from .env', posture erro…
cli.doctor-health-report acc[2] #5382 bad posture = error row, report continues, exit 1 pass OS_TENANCY_POSTURE=isolatd: '✗ Tenancy posture OS_TENANCY_POSTURE="isolatd" is not a recognized tenancy posture…' with accepted values; config-analys…
cli.doctor-health-report acc[3] #5429 ledger row under default posture pass no posture set, .objectstack/installed-packages/broken.json non-JSON: '⚠ Installed packages 1 installed-package ledger entry could not be read (those…
cli.doctor-health-report acc[4] Unique scope ✓ withheld on incomplete ledger pass OS_TENANCY_POSTURE=isolated + broken.json: step 'Checking unique scopes…' printed, NO '✓ Unique scope' line; same run after rm broken.json: '✓ Unique…
cli.doctor-health-report acc[5] config findings both ways pass staged (ObjectSchema objects qa_doctor_a↔qa_doctor_b lookups, unused qa_doctor_c, view {name:'qa_missing',object:'qa_missing',list:{columns:['title']…
cli.doctor-health-report acc[6] exit contract warnings 0 / errors 1 pass warnings-only runs (baseline, staged, ledger, monorepo) EXIT=0 under '⚠️ Environment is functional but has some warnings.'; posture-error runs EXIT=…
cli.doctor-health-report acc[7] monorepo-only scans report skip as ℹ pass scaffold: 'ℹ Test coverage Skipped — no packages/spec/src in this directory (monorepo-only check)' and same for Deprecations; -v adds '→ Looked for ‹…
cli.doctor-health-report neg[0] bad posture not swallowed as config-load pass error row + exit 1, no 'Could not load config for analysis'
cli.doctor-health-report neg[1] no Unique scope ✓ over unreadable ledger pass see acceptance[4]
cli.doctor-health-report neg[2] warnings never exit 1; errors never 0 pass see acceptance[6]
cli.doctor-health-report neg[3] no @objectstack/spec Not built in user app pass grep '@objectstack/spec|Not built' in both scaffold transcripts = 0
cli.doctor-health-report neg[4] skip rows are ℹ not ⚠ pass rows printed with ℹ; clean scaffold summary '✅ Environment is healthy'
cli.doctor-health-report neg[5] skip rows present, not dropped pass both rows present in plain and -v scaffold runs
cli.migrate-duplicates-inventory acc[0] report contract shape pass jq walk: report='duplicate-identifiers', reportVersion=2, generatedAt, database, globalPartition='global', filter=null, counters={table:'_objects…
cli.migrate-duplicates-inventory acc[1] cross-partition reported, within-partition not pass TK-0001 (ticket_no) reported with partitions ['global','org_mvf9jelsm1bfve0u'], holders qa_r1/qa_r2; ext_code 'DUPX' twice in one org appears now…
cli.migrate-duplicates-inventory acc[2] DB content byte-identical after runs pass sha256-16 rows 148dd638af7b0416 / seq a0b4432693d4c4a4 / sqlite_master 643a4b64a34a0384 identical before, after scan, after migrate plan, and at the …
cli.migrate-duplicates-inventory acc[3] kernel:ready preflight reports blocked overlay index pass runtimeIndexPreflight: idx_sys_metadata_overlay_active status 'blocked', group {type:'view',name:'qa_c2_dup_view',package_id_key:'',bundle_member_key…
cli.migrate-duplicates-inventory acc[4] live condition with counters; vanishes when org counter dropped pass liveConditions [{object:showcase_dup_probe,field:ticket_no,globalLastValue:1,organizationCounters:[{organization:org_…,lastValue:4}]}]; on a DB copy …
cli.migrate-duplicates-inventory acc[5] --object recorded in .filter pass filter null (full), {object:'showcase_dup_probe'} (scanned 2, 1 dup), {object:'showcase_category'} (scanned 0, 0 dups)
cli.migrate-duplicates-inventory acc[6] --database-url / OS_DATABASE_URL reach DB; unprobeable → skipped pass OS_DATABASE_URL run and --database-url run: same database path, duplicates arrays equal; DB copy with showcase_field_zoo table dropped → skipped [{ob…
cli.migrate-duplicates-inventory acc[7] no_sql_seam refuses loudly; memory:// boot_failed pass duplicates.null-seam.test.ts passed (vitest: 3 files, 18 tests passed); --database-url memory://qa → {"error":"boot_failed","detail":"…memory:// sc…
cli.migrate-duplicates-inventory neg[0] no write to inspected DB pass three dump pairs identical; scan created no sqlite file (.objectstack/data/showcase_external.db predates the scan, 13:01:31 from the dev boot)
cli.migrate-duplicates-inventory neg[1] within-partition repeat not in duplicates pass DUPX absent from duplicates
cli.migrate-duplicates-inventory neg[2] no --json flag (runner trap) pass migrate duplicates --json → 'Nonexistent flag: --json' exit 2 — recorded as the declared contract, not a finding; stdout parses as one JSON documen…
cli.migrate-duplicates-inventory neg[3] empty duplicates with skipped not called clean pass dup2 run: skipped non-empty listed with reason beside its duplicates; the --object showcase_category run had empty duplicates AND empty skipped (scan…
cli.datasource-introspect-codegen acc[0] list-tables lists tables; --schema narrows via ?schema= pass live (showcase copy in RUNDIR, port 41340, admin token): os datasource list-tables showcase_external → 'customers (7 cols)', 'orders (7 cols)' EXIT…
cli.datasource-introspect-codegen acc[1] introspect prints draft; --out writes file; REVIEW lines pass stdout draft showcase_customers with fields id, created_at, updated_at, name, email, region, lifetime_value (= remote columns), external.remoteName…
cli.datasource-introspect-codegen acc[2] --out jail refuses absolute and ../ paths, no file pass --out ../qa-escape.object.ts and --out /tmp/qa-escape.object.ts each: 'Error: --out must be a relative path within the current directory: …' EXIT…
cli.datasource-introspect-codegen acc[3] generated draft compiles through os build pass scratch config (namespace 'showcase') importing the draft: os build EXIT=0 'Data: 1 Objects 7 Fields'; artifact holds showcase_customers datasource…
cli.datasource-introspect-codegen acc[4] validate ✓ on match; ✗ diff rows + exit 1 on drift pass untouched: '✓ showcase_ext_customer matches' '✓ showcase_ext_order matches' EXIT=0; renamed customers.email→email_renamed: '✗ missing_column: showcas…
cli.datasource-introspect-codegen acc[5] server error arm → nonzero exit; validate unknown = vacuous ok pass list-tables qa_nope_ds: "[ObjectQL] Datasource 'qa_nope_ds' has no registered driver to introspect." EXIT=2; introspect qa_nope_ds: same text EXIT=2;…
cli.datasource-introspect-codegen neg[0] --out escape lands a file outside project pass both escape probes refused, no file written
cli.datasource-introspect-codegen neg[1] validate exits 0 with error diff pass error-severity diffs exited 1 (twice, two drift kinds)
cli.datasource-introspect-codegen neg[2] draft does not compile pass os build EXIT=0
cli.datasource-introspect-codegen neg[3] route-spelling trap pass CLI addressed /external/tables (seen on echo server); /remote-tables not probed
cli.datasource-introspect-codegen neg[4] wrong-persona 403 pass admin token minted via sign-in; all commands answered 200-path data, no 403
cli.hook-body-extraction-gates acc[0] --strict-body refuses each forbidden pattern with own reason pass '✗ --strict-body: 7 callable(s) lack a metadata body' with per-hook reasons: import -› 'dynamic import() and ES imports are not allowed … — declare…
cli.hook-body-extraction-gates acc[1] api.read/api.write inference incl. alias pass artifact body.capabilities: qa_i_find ['api.read'], qa_i_update ['api.write'], qa_i_alias (const api = ctx.api) ['api.read']
cli.hook-body-extraction-gates acc[2] crypto.uuid/log inferred; hash infers nothing pass qa_i_uuid ['crypto.uuid'], qa_i_log ['log'], qa_i_hash (only ctx.crypto.hash) []
cli.hook-body-extraction-gates acc[3] declared body caps verbatim; retired comment inert pass qa_i_data body {language:'js',source,capabilities:['api.read','log']} -› artifact caps ['api.read','log']; qa_i_retired (// @capabilities api.write l…
cli.hook-body-extraction-gates acc[4] #1876 free identifier bundled by default, fatal under strict pass default EXIT=0, warning 'handler references identifier(s) not in scope at runtime: qaHelperNormalize … will be BUNDLED', artifact qa_x_helper has no …
cli.hook-body-extraction-gates acc[5] all-body-only skips and cleans bundle pass after removing the helper hook from a dist holding objectstack-runtime.e7e05d3bb4160620.mjs: '→ Skipping legacy runtime bundle (all 1 callables are b…
cli.hook-body-extraction-gates acc[6] default build warns per refused handler, exits 0 pass default build over forbidden seven EXIT=0 (x2): '⚠ 7 handlers could not be lowered to a metadata body — bundled via the legacy runtime module instead…
cli.hook-body-extraction-gates neg[0] forbidden body never reaches artifact as source pass jq: all 7 forbidden hooks 'body' absent
cli.hook-body-extraction-gates neg[1] no crypto token from ctx.crypto.hash pass qa_i_hash caps []
cli.hook-body-extraction-gates neg[2] strict never exits 0 with bodyless callable pass strict runs EXIT=1 with worded reasons, never 'could not parse'
cli.hook-body-extraction-gates neg[3] alias not escaping inference pass qa_i_alias ['api.read']
cli.hook-body-extraction-gates neg[4] scope boundary (runtime sandbox not owned) skipped scope note, not a testable assertion here
cli.dev-automigrate-policy acc[0] safe applies exactly safe diffs, logs each, converges pass scratch stack, config-declared sqlite qa_main (schemaMode managed, autoMigrate 'safe') routed by datasourceMapping default; staged: relaxed storage.n…
cli.dev-automigrate-policy acc[1] off explicit or omitted: warns, schema unchanged pass autoMigrate 'off' boots ×2 and key OMITTED boots ×2: each logs the 3 [schema-drift] warnings (strict NOT NULL, extra orphaned, code legacy platform-w…
cli.dev-automigrate-policy acc[2] NODE_ENV=production ignores declared safe, warns, no alter pass re-planted legacy index, NODE_ENV=production + autoMigrate 'safe': log carries verbatim "[schema-drift] autoMigrate='safe' is ignored under NODE_ENV=…
cli.dev-automigrate-policy acc[3] safe only under managed; destructive never auto-applied pass safe boots ×2 kept the orphaned extra column and the NOT NULL on strict (warned each boot); composition: a second datasource qa_ext schemaMode 'ext…
cli.dev-automigrate-policy acc[4] ADR-0120 D4 tighten: clean→applied, duplicates→BLOCKED pass HAND-STAGED live (keyless os dev, injected safe): bare UNIQUE(organization_id, code) + two NULL-org rows code 'dup' → "[schema-drift] qaam_item: cann…
cli.dev-automigrate-policy acc[5] CLI injects safe only in dev, keyless pass no-datasource scratch stack, os dev -d file:host.db (no autoMigrate anywhere): planted legacy index → '[schema-drift] auto-reconciled replace_uniqu…
cli.dev-automigrate-policy neg[0] safe applies destructive drift pass orphaned column survived every safe boot
cli.dev-automigrate-policy neg[1] off/omitted/production boot changes schema dump pass dump pairs identical for off×2, omitted×2, production
cli.dev-automigrate-policy neg[2] duplicates tighten auto-applied pass blocked with row report, rows and old index intact
cli.dev-automigrate-policy neg[3] autoMigrate on sqlite-wasm appearing to act skipped not staged (knownGaps: wasm/turso arms not staged)
cli.migrate-meta-write-stored-and-all acc[0] write/stored/relevance pins pass pass t1-cli.log @5b14b7f3: cli migrate-meta-write 23, meta.report-order 21; spec semantic-relevance 22, refused-shapes 46; service-automation canonicalize…
cli.migrate-meta-write-stored-and-all acc[1] report-only run leaves sources byte-identical pass scratch showcase with planted refreshInterval:300 + spread ...{refreshInterval:60}: tracked-sources hash 0f280d836f778ed9 before == after `migrate me…
cli.migrate-meta-write-stored-and-all acc[2] --write edits mechanical sites, lists manual, idempotent pass --write --json exit 0: 2 files 4 insertions/4 deletions (refreshInterval→refreshIntervalSeconds; 3 flow decision config:{mode:'inclusive'}), nothing …
cli.migrate-meta-write-stored-and-all acc[3] absent notices one line; --all lists them pass minimal stack (one object): default prints 383 notices + '21 more manual change(s) not listed: their surfaces are absent from this stack (run with --…
cli.migrate-meta-write-stored-and-all acc[4] --stored TODO per refused stored shape pass scratch DB + sys_metadata view row with data.provider:'api': --stored --json exit 0 scanned 2 canonical 1 skipped 1; row qa_api_view todos[0].conve…
cli.organization-ownership-ceremony acc[0] ceremony pins pass at subject sha pass t1-cli.log packages/cli @5b14b7f3: 22 files/309 passed; apply-flags 7, organization-ownership-apply 112, occupancy 5, dialect 19, apply-gate 5, comme…
cli.organization-ownership-ceremony acc[1] bare run writes plan, DB checksum unchanged fail bare run (twice, --out and default/--json) → exit 1 {error:plan_refused, reason:upgrade-unavailable, code:NOT_IMPLEMENTED}; NO organization-ownership…
cli.organization-ownership-ceremony acc[2] plan-file-required / mismatch / database-busy refusals fail --apply w/o plan, --apply with other-DB plan, --apply beside a live better-sqlite3 holder: all three → exit 1 apply_refused reason upgrade-unavailabl…
cli.organization-ownership-ceremony acc[3] apply checkpoints sys_migration; drop gate withholds fail drop-gate half PASSES live: migrate apply --allow-destructive --yes --json on v17 copy → exit 1 message refused_organization_ownership_unmigrated t…
cli.organization-ownership-ceremony acc[4] migrated copy boots under v18 fail no migrated copy can be produced in 18.0; os dev/os serve on the v17 copy exit 1 before listening: 'This database is still in the v17 organizatio…
cli.organization-ownership-ceremony neg[0] no refusing arm alters the DB pass every ceremony arm (bare x2, apply x4 incl. holder) and the refused --allow-destructive apply left v17 copies at sha acc7f22dfda38a46 (== pristine co…
cli.meta-package-flags-and-explain acc[0] package/force/no-op/explain pins pass pass t1-cli.log @5b14b7f3: register-package 8, delete-reset-carriers 29, register-force 7, explain-rule-id 14, delete-noop-line 7 — all passed
cli.meta-package-flags-and-explain acc[1] --package sends ?package=, empty refused pre-send pass register --package com.example.showcase → PUT …/meta/view/showcase_task.qa_view?package=com.example.showcase (422 WRITABLE_PACKAGE_REQUIRED, read-onl…
cli.meta-package-flags-and-explain acc[2] destructive register: hint, then --force passes pass object qa_destr minus field 'note' → 409 DESTRUCTIVE_CHANGE + '⚠ On this command, ?force=true is --force …', exit 1; with --force '✓ Metadata registe…
cli.meta-package-flags-and-explain acc[3] explain --json shape, list, unknown exits 1 pass explain field-no-consumers exit 0; --json keys [rule,covers,paragraphs(7)] exit 0; bare explain lists schemas + rule ids exit 0; no_such_rule → '✗ Un…
cli.validate-v18-authoring-verdicts acc[0] new verdict pins pass pass t1-cli.log @5b14b7f3: spec define-seed-record-keys 9, stack-duplicate-entry 138, stack-cbp-extension-master 12, stack-email-sms 16; formula validate-…
cli.validate-v18-authoring-verdicts acc[1] each arm fails validate and build pass validate --json/validate/build exits: seed created_atx 1/1/2 (did-you-mean 'created_at'); record["typo"] 1/1/1 expression-invalid 'unknown field `typ…
cli.validate-v18-authoring-verdicts acc[2] controls pass pass stock (seed key created_at) 0/0/0; record.name != "record.typo" 0/0/0; email:{provider:'log'} 0/0/0, each with 'Validation passed'
cli.verify-derived-proof-families acc[0] five family pins pass pass t1-cli.log @5b14b7f3: verify-reference-shapes 3, verify-delete-behaviors 3, verify-unique-scopes 3, verify-parent-write-reach 3, verify-dashboard-win…
cli.verify-derived-proof-families acc[1] each family exit 0, report in --json pass showcase copy: --reference-shapes exit 0 referenceShapes{proven 8,holes 0}; --delete-behaviors 0 deleteBehaviors{proven 9,contradicted 0}; --unique-s…
cli.verify-derived-proof-families acc[2] planted defect → --delete-behaviors nonzero pass planted beforeDelete hook on showcase_account deleting its contacts (declared set_null): exit 1, hardFailures 1, showcase_contact.account declared se…

Reproduction rules (fails)

  • cli.organization-ownership-ceremony acceptance[1], acceptance[2], acceptance[3] (checkpoint half), acceptance[4] — disposition: stale-spec · stale-spec, NOT release-blocking. RUNNER rule 7: an independent second agent re-derived the verdict from the captured evidence alone (plus one confirming probe on a fresh copy of the v17 fixture: exit 1 plan_refused / upgrade-unavailable / NOT_IMPLEMENTED, no plan file, sha256 acc7f22dfda38a46 before == after) and AGREES: fail, stale-spec, not a release stop. Revision 1 pins the full v17-to-v18 ceremony; ruling records 6259608309 (item 1) and 6259698357 then cut 18.0 to fresh installs on the single posture, carried by .changeset/pre/15212-180-guards-fresh-single-only.md, the ADR-0131 release-scope note and organization-ownership.ts:1098-1146. Every refusing arm left the DB byte-identical, the drop gate held and the v17 boot guard refused — the ruled 18.0 behaviour. Re-point (revision 2 to the 18.0 refusal contract with the ceremony moved to planned / since 18.x, or planned + a separate refusal item; add organization-ownership.release-refusal.test.ts to automated.ref) is parked on the wave anchor via the Checklist-accuracy section, per this wave plan.
    • repro: scratch DB = os-dev-synced showcase DB + ALTER TABLE sys_platform_setting ADD COLUMN organization_id TEXT (the apply-gate pin's v17 shape); from scratch app copy: os migrate organization-ownership --database-url file:V17 [--json]; … --apply [--plan-file P --backup-taken] (with and without a second process holding the file); then os dev -d file:COPY
    • expected vs actual: expected: plan file written; plan-file-required / plan-*-mismatch / database-busy reasons; sys_migration adr-0131 checkpoint; migrated copy boots. actual: every invocation answers NOT_IMPLEMENTED upgrade-unavailable 'os migrate organization-ownership is not available in 18.0. 18.0 supports fresh installs only; the v17 → v18 upgrade path ships in an 18.x release … Nothing was read or written.' exit 1; boot guard refuses the v17 copy
    • mechanism: deliberate: packages/cli/src/commands/migrate/organization-ownership.ts:1093-1146 (MigrateOrganizationOwnership overrides run(); ruling record 6259608309 on the v18 epic, item 1); pinned by organization-ownership.release-refusal.test.ts (5/5 passed, run by C4 — not in this item's automated.ref)

Derived item verdicts

17 pass · 0 partial · 1 fail · 0 blocked · 4 not-run (of 22).

Tier 1 pin runs (RUNNER rule 6, one vitest batch per package, all at the subject sha):

  • packages/cli: 22 files, 309 passed (organization-ownership.apply-flags, organization-ownership-apply, organization-ownership.occupancy.integration, organization-ownership.dialect, apply-organization-ownership-gate.integration, comment-reactions.integration, organization-ownership-host-supplement.integration, migrate-meta-write, meta.report-order, verify-tenancy-posture, format.exit-code, register-package, delete-reset-carriers, register-force, explain-rule-id, delete-noop-line, verify-reference-shapes, verify-delete-behaviors, verify-unique-scopes, verify-parent-write-reach, verify-dashboard-windows, datasource/envelope-unwrap)
  • packages/spec: 6 files, 243 passed (conversions/refused-shapes, data/define-seed-record-keys, migrations/semantic-relevance, stack-cbp-extension-master, stack-duplicate-entry, stack-email-sms)
  • packages/lint: 2 files, 113 passed (data-model-rules.master-detail-required, validate-component-props); packages/formula: 1 file, 31 passed (validate-field-existence-spellings)
  • packages/services/service-automation: 1 file, 40 passed (canonicalize-stored-flow); packages/drivers/driver-sql: 1 file, 13 passed (sql-driver-schema-drift)
  • packages/rest: 1 file, 10 passed (remote-tables-twin.equivalence); packages/services/service-datasource: 1 file, 42 passed (external-datasource-service)
  • extra pin run by the runner: packages/cli organization-ownership.release-refusal.test.ts 5/5 passed (the 18.0 refusal pin — NOT listed in the item automated.ref)
  • cli.scaffold-first-run: its ref is the GitHub workflow .github/workflows/scaffold-e2e.yml, not runnable here — every clause driven by hand with the pre-release variant (73 workspace packages packed at 5b14b7f into a local-only registry, lockfile integrities checked against the local tarballs); the published create-objectstack@latest 17.7.0 was run separately and does not stand in for the pin

Handover — items with no verdict this run

  • cli.flag-command-error-ux r3 · P2 · cli — Tier 3 deferred by the 18.0 release-sweep plan
  • cli.doctor-deprecation-scan r3 · P2 · cli — Tier 3 deferred by the 18.0 release-sweep plan
  • cli.lint-severity-exit-contract r1 · P2 · cli — Tier 3 deferred by the 18.0 release-sweep plan
  • cli.plugin-manifest-build-contract r3 · P2 · cli — Tier 3 deferred by the 18.0 release-sweep plan

Checklist-accuracy findings / fixture gaps

Recorded for the wave anchor (collected by the dispatch session); not extracted, no checklist edit in this run.

Checklist accuracy:

  • cli.build-own-contract · steps[2] · 'delete its type' on a stock helper-authored object (ObjectSchema.create / Field.textarea) does not reach compile's validator: ObjectSchema.create parses eagerly at import, so the build dies at 'Loading configuration…' with a RAW JSON dump of the Zod issue array (path [fields,body,type], no object name) — exit 2 human / 1 json. The located 'defineStack validation failed … objects.0.fields.body.type' shape needs the object authored as a plain literal; say so in the step
  • cli.build-own-contract · steps[5] · the nested strip-mode key must sit on a RAW field object: written inside a helper (Field.textarea({ visibleWhen: { …, qaUndeclared: 1 } })) it is stripped by the helper's own parse with NO advisory under either defineStack mode (build exit 0, key silently absent). Name the raw-literal requirement in the step (the silent strip itself may deserve a separate look — the 排查「手抄 spec 清单 + "keep in sync" 注释」模式:一天内确认三例,全部曾静默漂移 #3786 'never silently dropped' intent does not cover helper-built fields)
  • cli.build-own-contract · acceptance[3] · build's rule-failure payload names the findings 'issues' while validate --json names the same list 'errors' (and success:false vs valid:false); warnings/conversions do match. The clause's parity wording covers only warnings/conversions, so pass — but the failure-list key differs between the two surfaces
  • cli.hook-body-extraction-gates · steps[0] · FORBIDDEN_PATTERNS now has more than seven entries (.sudo(, .create( …); the 'forbidden seven' covers only the original set
  • cli.doctor-health-report · fixtures · the stock blank scaffold always carries an Object usage ⚠ (starter object unreferenced) so a baseline never reaches '✅ healthy' — the clean three-✓ run needs a view on the note (staged here)
  • cli.qa-suite-execution · steps[6] · 'the server log carries no request attributable to it' cannot be consulted: the stock dev boot logs no per-request lines. Suggest the transcript (no Scenario line) plus a uniquely tagged target URL as the oracle
  • cli.qa-suite-execution · fixtures.requires[0]/steps[0] · prescribes pnpm dev -- --fresh -p ‹port› from repo root; the sweep brief's isolated boot (-d file:RUNDIR/‹db›) works equally and is what was used
  • cli.migrate-duplicates-inventory · acceptance[3] verify · 'the SAME database run through os migrate plan mentions neither the index nor the seeded name': plan's STDOUT does carry the seeded name in '[Registry] Registered view: qa_c2_dup_view' boot lines (and stderr in [metadata_spec_invalid]); only the plan REPORT omits both. The clause should scope to the report body
  • cli.migrate-duplicates-inventory · steps[4] · 'Seed a metadata body the spec accepts' — a minimal {name,label,object} view body is refused ('no recognized view key'); naming a known-valid minimal body (e.g. with type/columns) would save the next runner the hydration noise
  • cli.migrate-meta-codemod · fixtures.knownGaps[2] · ObjectSchema.create()/definePermissionSet() parse at module load, so a retired key planted inside them throws before the chain runs; the knownGap could say that plants must be plain literals outside define/create helpers that parse (defineStack itself is tolerated: the CLI hands its refusal to the chain)
  • cli.dev-automigrate-policy · acceptance[5] / steps[4] · the injection site cited as storage-driver.ts isDev ? { autoMigrate: 'safe' } : {} moved: since cli: a plain os dev (standalone stack) never runs autoMigrate 'safe' — the documented dev self-heal applies only to host configs, while plan and drift lines say "auto-applied at boot" #21733 the decision lives in packages/runtime/src/dev-auto-migrate.ts, read by createStandaloneStack's default datasource plus the CLI fallback/telemetry; behavior matches the clause
  • cli.scaffold-console-first-paint · fixtures.knownGaps[2] · under the pre-release variant the scaffold's console is the locally packed @objectstack/console (pinned .objectui-sha), not the published one — the gap text assumes the published path only
  • cli.datasource-introspect-codegen · acceptance[0] · the 'CLI flag-to-query forwarding is not pinned' remainder can be proven without a schema-bearing driver by pointing --url at a local echo server (observed GET …/external/tables?schema=mart); consider adding that to steps
  • cli.organization-ownership-ceremony · whole item · describes the 18.x upgrade ceremony; at 5b14b7f the registered os migrate organization-ownership refuses every invocation with NOT_IMPLEMENTED (ruling record 6259608309, organization-ownership.ts:1093-1146). acc[1]-[4] and steps 1-3,6 need an 18.0 rewrite (refusal reads nothing / writes nothing; drop gate holds; boot guard refuses) or a planned split for 18.x
  • cli.organization-ownership-ceremony · automated.ref · omits packages/cli/src/commands/migrate/organization-ownership.release-refusal.test.ts, the pin of what 18.0 actually ships; the listed pins exercise the inner OrganizationOwnershipCeremony class, not the registered command
  • cli.migrate-meta-write-stored-and-all · steps 1-3 · --from 17 does not replay 16→17 conversions (e.g. view.striped stays a refusal); plant 17→18 spellings (refreshInterval, object-grid defaultFilters). The showcase has 0 absentTodos, so the --all leg needs a minimal stack, as the step hints
  • cli.meta-package-flags-and-explain · step 1 · register view … --package com.example.showcase answers 422 WRITABLE_PACKAGE_REQUIRED on stock showcase (code package is read-only) — ?package= is still visible in the request URL, but a positive save needs a writable package; view names are ‹object›.‹view›
  • cli.migrate-plan-apply-json · step 2 · on an os-dev-synced DB the 'pending add-column plan' also carries 7 create_table entries for the dev telemetry-home tables

Fixture gaps:

  • cli.dev-boot-contract · no stock fixture declares a config default datasource (datasourceMapping default:true → declared sqlite datasource); staged in a scaffold copy for the config-datasource tier
  • cli.migrate-meta-codemod · the refusal kinds other than 'spread' (computed, helper, shared, …) and the 'restored' exit-1 branch were not reconstructed in this run; they rely on the migrate-meta-write.test.ts pin
  • cli.migrate-duplicates-inventory · the mongodb no_sql_seam branch is unverified (driver not loaded), as the item already records
  • cli.datasource-introspect-codegen · stock fixture yields no draft.review notes, so the REVIEW: warning surfacing is never observable live
  • cli.scaffold-first-run · no sqlite3/verdaccio in the image: pre-release variant needed verdaccio@6 installed into RUNDIR (npm) and packing 73 public packages (~1 min)
  • cli.organization-ownership-ceremony · no shipped v17 DB; built by planting sys_platform_setting.organization_id (+ sys_comment.reactions) into an os-dev-synced v18 DB, as the apply-gate pin does
  • cli.verify-verdict-exit-mapping · fail side staged at RUNDIR/failapp (hook-mutated title → fidelity-gap; throwing hook → create-failed 400); no 5xx or live RLS hole staged

Observations handed to the dispatch session (no card filed — this runner card's 3-card defect quota is spent on #24546 / #24547 / #24548)

  • Dead-end remedy text (seen driving cli.organization-ownership-ceremony acceptance[3]): the os migrate apply drop-gate refusal refused_organization_ownership_unmigrated (packages/cli/src/commands/migrate/apply.ts:586-590) tells the operator to run os migrate organization-ownership --out PLAN and then --apply — both of which refuse NOT_IMPLEMENTED in 18.0. The boot-guard sentence already carries the 18.0 caveat; this one does not. reach: os migrate apply --allow-destructive --yes --json on a v17-shaped DB copy prints the prescription. Low severity, release-frozen wording.
  • Cross-area note for platform-core.v18-boot-refusals acceptance[2] (not in this selector): os serve (non-dev) against a v17-shaped DB first synced by os dev created 7 new tables (sys_automation_run and siblings) before the v17 guard refused — DB checksum changed, no existing table or row changed. os dev on the same copy left the DB byte-identical.

Activity

  1. objectstack-fleet commented on Oct 19, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out for this run record. No product defect was found in this area, so nothing is extracted from it.

    Still open on this record, handed to the dispatch session for the wave anchor (runners file no anchor card this wave):

    • P0 cli.organization-ownership-ceremony acceptance[1]-[4] fail — disposition stale-spec, not release-blocking. RUNNER rule 7 independent re-derivation agrees (fail · stale-spec · not a release stop). Re-point belongs on the anchor; add organization-ownership.release-refusal.test.ts to its automated.ref.
    • 4 Tier 3 items not-run by plan (handover list in the body).
    • Two observations with no card (quota spent): the drop-gate remedy sentence in apply.ts:586-590 names commands that refuse in 18.0; and a cross-area note for platform-core.v18-boot-refusals acceptance[2] — see the body.

    P0 cli.dev-boot-contract passed; no authentication/authorization finding.


    Generated by Claude Code

  2. changed the title [-]QA run · area:cli (18/22) · 5b14b7f3 · 2026-10-19 · 17 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 4 NOT-RUN[/-] [+]QA run · cli (18/22) · 5b14b7f3 · 2026-10-19 · 17 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 4 NOT-RUN[/+] on Oct 19, 2026
  3. 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)
    Parked-on: #24579 · cli.organization-ownership-ceremony · acceptance[1]–[4] (re-point, wave anchor §1)


    Generated by Claude Code

  4. 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