Skip to content

QA run · area:cli (17/17) · 94114c1f · 2026-10-16 · 16 PASS / 0 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #23921

Closed

Description

@objectstack-fleet

Run record for the full-checklist wave anchored on #23878 (selector all, run per area). Runner session session_01K3qUoyh1xFGoWzAACPMbXJ, dispatched by the domain:devx seat 1 PM. Protocol: .claude/skills/checklist-test/SKILL.md + docs/qa/platform-checklist/RUNNER.md.

Environment fingerprint

  • framework: 94114c1f269f6b3d885f24b6f4689dce29504574 (origin/main at run start; pnpm install --frozen-lockfile && pnpm build, 75/75 green)
  • resolver: node scripts/checklist-select.mjs all at that sha → 272 runnable · 2 blocked hidden · 1 planned
  • .objectui-sha: daeb77fc84dd824e74c95b87cdede85afdb248e7. ⚠ pnpm objectui:build FAILS on this sha (Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908). Browser/mixed verdicts ran on a console built at that same pin against @objectstack/spec from a35f7a67^ (the commit before the deletion), served from a linked worktree at 94114c1f with identical framework dists. check:console-sha matches.
  • app: showcase · boot OS_PORT=P objectstack dev --ui --seed-admin -p P -d file:…/data.db · per-runner port and DB · seeded admin + demo personas
  • browser: Playwright 1.63 on /opt/pw-browsers/chromium (Chromium 141), one context per persona
  • timestamp: 2026-10-16 (UTC) · runners:
  • G9 (cli): ports [41180,41181,41182,41183,41184,41185,41186,41187,41188] · sequential · env 22 min / test 54 min

Scope

Selector area:cli (from the all resolution) · 17 runnable item(s):

  • cli.dev-boot-contract r4 · P0 · cli → pass
  • cli.build-own-contract r4 · P1 · build → pass
  • cli.migrate-plan-apply-json r4 · P1 · cli → pass
  • cli.verify-verdict-exit-mapping r1 · P1 · cli → pass
  • cli.scaffold-first-run r4 · P1 · mixed → pass
  • cli.qa-suite-execution r6 · P1 · cli → pass
  • cli.flag-command-error-ux r3 · P2 · cli → pass
  • cli.migrate-meta-codemod r4 · P1 · cli → fail
  • cli.scaffold-console-first-paint r3 · P1 · mixed → pass
  • cli.doctor-health-report r2 · P1 · cli → pass
  • cli.doctor-deprecation-scan r3 · P2 · cli → pass
  • cli.migrate-duplicates-inventory r6 · P1 · cli → pass
  • cli.datasource-introspect-codegen r4 · P2 · cli → pass
  • cli.hook-body-extraction-gates r2 · P1 · cli → pass
  • cli.lint-severity-exit-contract r1 · P2 · cli → pass
  • cli.plugin-manifest-build-contract r3 · P2 · cli → pass
  • cli.dev-automigrate-policy r1 · P1 · cli → pass

Per-clause verdicts

item # clause (short) verdict evidence
cli.dev-boot-contract 0 boot reaches health/ready; console served with --ui pass health 200 ~18s, /ready {"status":"ready"}; worktree boot :41184 /_console/ 200, login form screenshot, form sign-in -) /_console/home, get-session 200, LS token + better-auth cookie
cli.dev-boot-contract 1 --seed-admin fixed admin, idempotent seed pass restart same DB with --admin-password changed99: sign-in admin123 -) 200, changed99 -) 401
cli.dev-boot-contract 2 DB selection follows shared matrix, persistent unified default pass none chosen: file:(cwd)/.objectstack/data/objectstack.db (persists after exit); env OS_DATABASE_URL honored; -d :memory: ok; datasourceMapping default -) declared file; legacy dev.db read with notice, no objectstack.db created
cli.dev-boot-contract 3 --fresh isolates OS_HOME tempdir, auto-deleted pass 🧪 Fresh OS_HOME: /tmp/objectstack-dev-WgrKzE, DB same filename under it; dir gone after SIGINT (exit 130); showcase_external.db survives = documented #5594 carve-out
cli.dev-boot-contract 4 busy port auto-shifts and is reported pass B: "⚠ Port 41180 is in use — serving on 41181 instead." + "↪ server bound to port 41181 (requested 41180)"; health :41181 200
cli.dev-boot-contract 5 stale artifact warned, still boots pass "⚠ dist/objectstack.json is OLDER than your sources" newest source src/ui/actions/index.ts + fix line; health 200
cli.dev-boot-contract 6 no config, no artifact: exit 1 with remedy pass exit 1; "✗ Config file not found …" + "Run in a directory with objectstack.config.ts, pass --artifact (path/url), or run from the monorepo root."
cli.build-own-contract 0 success exit 0, artifact + stats; --json keys pass exit 0, dist/objectstack.json 715.5 KB parses, Data/UI/Logic stats; --json has success,output,size,stats,warnings,conversions,duration (+bodyExtractionWarnings etc)
cli.build-own-contract 1 schema violation located; exit 1 json / 2 human pass "✗ objects.4.fields.color.type: Invalid field type ''" ; human exit 2, --json exit 1 {success:false,error,code:STACK_SCHEMA_INVALID}
cli.build-own-contract 2 author-time rules exit 1, all at once, where/message/hint/rule/path pass "✗ Author-time rules failed (2 issues)" both broken approvers; exit 1 both paths; issues[] carry rule approval-expression-invalid, where, path, hint, message
cli.build-own-contract 3 --json failure/advisory parity with validate pass schema-fail payload build {success,error,code,warnings,conversions} vs validate {valid,error,code,warnings,conversions,duration}; undeclared-key advisory string identical in build --json and validate --json warnings
cli.build-own-contract 4 #4873 exit is a status, stable on repeat pass success 0/0 (human, json, x2 each); load throw human 2/2, json 1/1; build == compile on same input
cli.build-own-contract 5 advisory never flips exit pass nested undeclared key (visibleWhen.zzzQaUndeclaredKey, strict:false): "⚠ Undeclared authoring keys (1) — dropped at load; reported here, never refused", exit 0, artifact written
cli.migrate-plan-apply-json 0 bare migrate is read-only plan, identical twice pass two bare runs: same plan (+ showcase_category [add_columns: qa_note] + 7 create_table); schema/rows/seq md5 unchanged across both
cli.migrate-plan-apply-json 1 plan --json shape, exit 0 pass keys database,managedTables(68),total,changes,pending (+composition,databaseSource,duration,unmanagedTables); exit 0
cli.migrate-plan-apply-json 2 #4873 every --json success exits 0 pass plan 0, apply --json (no --yes) 0, apply --json --yes 0, recorded-by --json 0, resume --json 0
cli.migrate-plan-apply-json 3 apply safe-by-default: drop skipped then applied pass apply --yes: "⚠ 1 destructive change(s) will be SKIPPED", column kept; --allow-destructive --yes: "✓ Applied 1 change(s)", column gone
cli.migrate-plan-apply-json 4 idempotent re-run, partial coverage honest pass plan: "⚠ No drift over the 68 object(s) … 2 of 70 … PARTIAL plan"; apply --json --yes {applied:[],skipped:[],created:[],message:in_sync_partial,coverage unexamined 2, federated 2} exit 0
cli.migrate-plan-apply-json 5 busy DB: apply exit 1, plan warns pass apply: "✗ …migrate.db is in use — it is open in pid 20417" exit 1; plan exit 0 with in-use warning
cli.migrate-plan-apply-json 6 --json non-interactive confirmation_required pass {message:confirmation_required,hint:"pass --yes"}, DB dump unchanged, follow-up plan still lists qa_note
cli.verify-verdict-exit-mapping 0 closed six-verdict vocabulary pass statuses {verified:15, needs-fixture:1, skipped:8}; summary objects 24 reconciles
cli.verify-verdict-exit-mapping 1 exit nonzero exactly when hardFailures)0 pass stock: recomputed 0+0+0 -) exit 0; staged fidelity gap app: fidelityGaps 1 -) exit 1 (json and human); staged throwing hook: createFailed 1 -) exit 1
cli.verify-verdict-exit-mapping 2 inconclusive split: VALIDATION_FAILED -) needs-fixture, no fail pass showcase_account needs-fixture code 400 VALIDATION_FAILED on exit-0 run; non-validation 400 (hook throw) -) create-failed, exit 1
cli.verify-verdict-exit-mapping 3 --rls separate stack; holes fail pass --rls --json exit 0, rls section present, per-persona summary proven 21, holes 0, hardFailures 0
cli.verify-verdict-exit-mapping 4 #5262 walled posture never quiet pass OS_TENANCY_POSTURE=isolated: exit 1, {"error":"verify: multiTenant=true requires the enterprise @objectstack/organizations package …"}
cli.scaffold-first-run 0 scaffold-)install-)validate-)build-)boot-)health pass npx create-objectstack@latest (17.7.0) -t blank --skip-skills exit 0 (pnpm install); npm run validate 0; build 0; os start --artifact :41183 health 200 at 12s, ready success
cli.scaffold-first-run 1 every template validates and builds pass blank (only template): validate 0, build 0 (2.4 KB artifact)
cli.scaffold-first-run 2 artifact boots via os start (protocol handshake) pass healthy boot, no protocol refusal in server.log (17.7.0 coherent scaffold)
cli.scaffold-first-run 3 skills boundary: set-equal, no internal skill pass installed unique SKILL.md names 10 == skills/ catalog 10 (diff empty); repo-root discovery lists 10, 0 hits for dogfood/checklist-test/pm-dispatch
cli.scaffold-first-run 4 never-healthy is a FAIL with server.log pass not triggered: healthy within budget; server.log has no error lines
cli.qa-suite-execution 0 green path, Found N)0, exit 0 pass "Found 1 test suites." 2 ✅ with ids+durations, "SUCCESS: All 2 scenarios passed." exit 0; second run identical, category list unchanged (teardown ran)
cli.qa-suite-execution 1 capture/interpolation threads state pass staged capture probe green; record QA-G9-capture-marker id nLUxhaLBIBHBF2-a read back independently 200; literal {{cid}} path -) 404
cli.qa-suite-execution 2 false assertion fails with field/expected/actual, exit 1 pass "Assertion failed: data.status expected degraded, got ok" under "Step Failed: GET health expecting degraded"; exit 1
cli.qa-suite-execution 3 #7256 unevaluable contains fails pass "data.nope cannot be evaluated by 'contains' … got undefined … Use 'is_null'"
cli.qa-suite-execution 4 #6247 load-site refusal, siblings still run, exit 1 pass "qa/a-malformed.test.json is not a valid Quality Protocol suite (TestSuiteSchema)" + "✗ scenarios.0.steps", siblings ran, "FAILED: 3 scenarios failed"
cli.qa-suite-execution 5 teardown after failed step pass td scenario ❌ "Step Failed: deliberate failure"; marker record count after = 0
cli.qa-suite-execution 6 8 action types each own verdict pass api_call/wait/create/read/update/delete/query ✅ (update set color #123456, delete removed target), run_script ❌ "Unsupported action type in HttpAdapter: run_script"
cli.qa-suite-execution 7 #7363 glob discipline pass bare os test finds qa/platform-smoke.test.json; qa/**/*.test.json finds same suite in 3.75s, exit 0
cli.flag-command-error-ux 0 unknown flag named, nonzero, body never runs pass "Nonexistent flag: --frobnicate" + See more help with --help, exit 2, 0 "Migrate · plan"/"Booting schema" lines
cli.flag-command-error-ux 1 enum flag out-of-set lists allowed set pass "Expected --log-level=bogus to be one of: debug, info, warn, error, fatal, silent" exit 2
cli.flag-command-error-ux 2 unknown command/topic-subcommand errors nonzero pass "command frobnicate not found" exit 2; "command environments:frobnicate not found" exit 2
cli.flag-command-error-ux 3 --help exit 0 + USAGE for every variant pass derived 33 (20 top-level, 12 topics, g alias) = variants list; all 33 exit 0 with USAGE; root and migrate --help exit 0
cli.migrate-meta-codemod 0 planted spellings all listed with successor pass "Applied 3 mechanical change(s)": views[0].list.striped (view-list-passthrough-keys-removed), retryDelayMs → backoffMs (retry-policy-converged), "10:00Z" → "10:00" (time-default-utc-suffix-dropped)
cli.migrate-meta-codemod 1 authored sources untouched; only --out written pass objectstack.config.ts md5 60d31e7c… identical before/after plain and --out runs
cli.migrate-meta-codemod 2 --out snapshot migrated, verdict honest pass snapshot: striped absent, backoffMs 2000, defaultValue "10:00"; "✓ Migrated stack is schema-valid" == --json schemaValid true
cli.migrate-meta-codemod 3 idempotent replay; empty range answered as empty pass canonical --from 17: no Applied block, exit 0 (368 advisories listed); --from 18: "⚠ No migration step exists for protocol 18 → 18 …"; two planted runs diff empty
cli.migrate-meta-codemod 4 below-floor --from refused pass --from 5: "✗ Cannot migrate from protocol 5: the chain's support floor is 16" exit 1
cli.migrate-meta-codemod 5 semantic entries surface as advisories pass "440 manual change(s) require your judgment:" with why/verify text, separate from Applied block
cli.migrate-meta-codemod 6 --json exits 0 on success pass --from 16 --json exit 0, keys absentTodos,applied,…,schemaValid
cli.migrate-meta-codemod 7 RESTART CONDITION: no in-place rewrite flag fail --help now lists --write ("Rewrite the authored source files in place …") and --all; #9591 closed completed 2026-10-08 (PR #22142); runtime protocol 18
cli.scaffold-console-first-paint 0 os validate passes on fresh scaffold pass npx create-objectstack@latest qa-console-first-paint exit 0; npx os validate exit 0
cli.scaffold-console-first-paint 1 console paints under os dev --ui pass npx os dev --ui :41185 /_console/ 200 18469 B; screenshot login form, sign-in -) /_console/home "Good afternoon, Dev Admin", 0 page errors
cli.scaffold-console-first-paint 2 npm run dev serves console like os dev --ui pass npm run dev /_console/ 200, HTML byte-equal (hash-normalized) to os dev --ui
cli.scaffold-console-first-paint 3 newcomer completes visual check pass seeded admin@objectos.ai/admin123 signs in through the form; POST /api/v1/data/qa_console_first_pai_note 201, GET by id 200 (both invocations); action/nav half N/A (blank scaffold ships no app)
cli.doctor-health-report 0 per-check rows; finding-only rows exactly when live pass scaffold: Node,pnpm,TS,Dependencies,Git,Env files + NODE_ENV (unset); no @objectstack/spec row; monorepo cwd: "✓ @objectstack/spec Built"; -v adds detail lines only
cli.doctor-health-report 1 #5387 env provenance pass .env OS_TENANCY_POSTURE=isolatd: finding fires, "Environment files .env … — OS_TENANCY_POSTURE from .env"; doctor-env-provenance.test.ts pass
cli.doctor-health-report 2 #5382 posture error row, report continues, exit 1 pass "✗ Tenancy posture OS_TENANCY_POSTURE="isolatd" is not a recognized…", later View integrity/Object usage rows print, "❌ Some critical issues found", exit 1
cli.doctor-health-report 3 #5429 ledger rows under every posture pass default posture: "⚠ Installed packages 1 installed-package ledger entry could not be read … broken.json"
cli.doctor-health-report 4 unique-scope ✓ withheld on incomplete ledger pass isolated+broken: no "Unique scope" ✓ line; isolated after removing entry: "✓ Unique scope No unconfirmed installation-wide uniques"
cli.doctor-health-report 5 config-analysis rows both ways pass staged: "⚠ Circular dependency: qa_first_run_alpha → … beta → … alpha", "⚠ Object "qa_first_run_note" … not referenced", "⚠ View "qa_ghost_view" … non-existent object"; clean: Dependencies/Object usage/View integrity ✓
cli.doctor-health-report 6 exit 1 exactly on error rows pass warnings-only runs exit 0 ("⚠️ Environment is functional…"); posture error runs exit 1
cli.doctor-health-report 7 monorepo-anchored scans: named skip vs scanned arm pass scaffold: "ℹ Test coverage Skipped — no packages/spec/src…", same for Deprecations; -v "→ Looked for …/packages/spec/src and found nothing to walk"; monorepo: "→ Checking for missing test files..." + ⚠ rows
cli.doctor-deprecation-scan 0 every pattern file:line, both lookup spellings pass 9 rows src/legacy.ts:1..9 for 8 entries; :5 reference_filters and :6 referenceFilters both reported
cli.doctor-deprecation-scan 1 --verbose prints replacements; bare withholds pass verbose: "→ Use maxLength (camelCase)", "→ Use lookupFilters …"; bare run 0 "→ Use" lines
cli.doctor-deprecation-scan 2 warns, never gates pass seeded exit 0 ("⚠️ Environment is functional"), clean exit 0 "✓ Deprecation scan No deprecated patterns found"
cli.doctor-deprecation-scan 3 decoys silent; .ts-only boundary pass no row names legacy.test.ts, src/node_modules/dep/index.ts or src/meta.json ("referenceFilters"); .json is outside the .ts-only walk (documented boundary, not evidence of clean metadata)
cli.doctor-deprecation-scan 4 absent-src prints same line; annotated pass dir with no src ("ls: cannot access 'src'"): "✓ Deprecation scan No deprecated patterns found" = scanned nothing
cli.doctor-deprecation-scan 5 hint prescribes no command; codemod not registered pass bare: "ℹ Found 9 deprecated pattern(s). No automated codemod ships with the CLI — apply each finding’s replacement by hand (re-run with --verbose…)"; verbose "…apply the → replacement shown…"; os codemod --help exit 2 "Command codemod not found."
cli.migrate-duplicates-inventory 0 declared report contract on stdout pass report duplicate-identifiers, reportVersion 2, generatedAt, database, globalPartition global, filter null, counters {table:_objectstack_sequences,status:read}, scanned/skipped/duplicates/liveConditions/runtimeIndexPreflight/summary; holders id/organization/partition/createdAt; contract pin pass
cli.migrate-duplicates-inventory 1 cross-partition reported, within-partition not pass f_autonumber "0001" partitions [global, org_…] holderCount 2; seeded within-org "0002" repeat absent from .duplicates
cli.migrate-duplicates-inventory 2 read-only: rows/sequences/sqlite_master identical pass dump md5 before == after: schema 66dfbc0b…, rows d7ca37b4…, seq 2628028f…
cli.migrate-duplicates-inventory 3 kernel:ready preflight reports blocked index; plan blind pass idx_sys_metadata_overlay_active blocked {type:view,name:qa_g9_dup_view,package_id_key:"",bundle_member_key:""} rowCount 2; summary runtimeIndexesBlocked 1; plan has no drift entry for it; 3 entries, none sys_view_definition
cli.migrate-duplicates-inventory 4 live condition global beside org counter pass liveConditions [{globalLastValue:1, organizationCounters:[{org,lastValue:2}]}]; org counter deleted -) [] while duplicates unchanged ["0001"]
cli.migrate-duplicates-inventory 5 --object narrows and records it pass .filter null (full) / {object:showcase_field_zoo} (1 dup) / {object:showcase_category} (0)
cli.migrate-duplicates-inventory 6 --database-url / OS_DATABASE_URL target pass --database-url file:…/dup.db same duplicates ["0001"] as the OS_DATABASE_URL run; skipped [] in all runs
cli.migrate-duplicates-inventory 7 no raw-SQL seam refuses loudly pass duplicates.null-seam.test.ts pass; --database-url memory://qa exit 1 {"error":"boot_failed","detail":"…memory:// scheme selects the in-memory (mingo) engine…"}
cli.datasource-introspect-codegen 0 list-tables via /external/tables; --schema narrows pass "customers (7 cols)", "orders (7 cols)" == sqlite3 cross-check customers:7 orders:7; stock SQLite --schema runs list all (knownGap); narrowing half from pins: remote-tables-twin.equivalence 10 passed, service schema filter 3 passed, envelope-unwrap passed
cli.datasource-introspect-codegen 1 introspect draft stdout; --out writes and echoes pass draft ObjectSchema.create showcase_customers with 7 columns; "Wrote objects/qa_external.object.ts"; no REVIEW notes produced by fixture
cli.datasource-introspect-codegen 2 --out jail both ways pass ../qa-escape and absolute path: "--out must be a relative path within the current directory" exit 2 each; neither file exists
cli.datasource-introspect-codegen 3 generated draft compiles pass scratch config wiring the draft + declared datasource: os build exit 0, artifact object showcase_customers datasource showcase_external 7 fields
cli.datasource-introspect-codegen 4 validate drift detector honest exit pass untouched: "✓ showcase_ext_customer matches" "✓ showcase_ext_order matches" exit 0; region renamed: "✗ missing_column: showcase_ext_customer.region" exit 1
cli.datasource-introspect-codegen 5 server error arm -) nonzero; validate unknown vacuous ok pass list-tables/introspect no_such_ds: "[ObjectQL] Datasource 'no_such_ds' has no registered driver…" exit 2 each; validate no_such_ds: "No federated objects to validate." exit 0 (recorded)
cli.hook-body-extraction-gates 0 --strict-body: each forbidden pattern own reason, exit 1 pass "✗ --strict-body: 7 callable(s) lack a metadata body", 7 per-pattern reasons (fetch/import name "declare a Connector recipe instead"); human exit 1, --json {success:false,error:"strict-body: missing body",issues:7} exit 1
cli.hook-body-extraction-gates 1 api.read/api.write inference incl. alias pass find ["api.read"], update ["api.write"], const api = ctx.api alias ["api.read"]
cli.hook-body-extraction-gates 2 crypto.uuid/log inferred; crypto.hash nothing pass randomUUID ["crypto.uuid"], log.info ["log"], hash-only []
cli.hook-body-extraction-gates 3 body.capabilities as data; retired comment adds nothing pass body-supplying hook ships ["api.read","log"]; retired @capabilities comment hook ["api.read"] only; build exit 0 silent
cli.hook-body-extraction-gates 4 #1876 free identifier bundled; strict fails pass default exit 0, hook body absent, runtime .mjs emitted; --strict-body exit 1 "references identifier(s) not in scope at runtime: qaHelper"
cli.hook-body-extraction-gates 5 all-body-only skips legacy bundle, cleans old pass "Skipping legacy runtime bundle (all 8 callables are body-only)"; planted stale .mjs removed by rebuild, dist holds objectstack.json only
cli.hook-body-extraction-gates 6 EXPECTED-FAIL: default path must surface the warning pass now surfaces: "⚠ 7 handlers could not be lowered to a metadata body — bundled via the legacy runtime module instead" + 7 per-hook reasons; --json bodyExtractionWarnings length 7; all 7 hooks body-less, bundle emitted
cli.lint-severity-exit-contract 0 closed severity vocabulary, grouped ✗/⚠/ℹ pass severities seen error, warning, suggestion only; human "Errors (1) ✗ … required/label at …", "Warnings (1) ⚠ … convention/label-case"; suggestion tier seen on showcase lint (approval-approvers-may-resolve-empty)
cli.lint-severity-exit-contract 1 exit 1 exactly on errors; duration in payload pass error config human 1/1, json 1/1; warnings-only human 0/0, json 0/0; payload duration numeric (165, 185)
cli.lint-severity-exit-contract 2 --json declared lint shape, counters reconcile pass {passed:false,total:2,errors:1,warnings:1,suggestions:0,issues[2]} recount matches; passed===(errors===0); extra keys conversions,failing,strict
cli.lint-severity-exit-contract 3 #4409 registry parity lint vs build pass broken approvers: lint ✗ approval-expression-invalid at flows[28].nodes[1/2]… exit 1; build "Author-time rules failed (2 issues)" same rule/paths; registry info -) suggestion
cli.lint-severity-exit-contract 4 i18n fold honest pass with zh-CN supported: bare "platform built-ins: 1150 i18n issue(s) hidden — rerun with --include-platform", hiddenPlatform 1150; --include-platform 1150 i18n/missing-metadataForm at translations.zh-CN.metadataForms.*; --skip-i18n 0 i18n issues, no disclosure
cli.lint-severity-exit-contract 5 --fix dry run, files byte-identical pass "→ fix: Lower case label", "ℹ Dry-run mode: no files were modified."; md5sum -c OK for both files
cli.lint-severity-exit-contract 6 load failure exit 1 both paths, parseable json pass throwing config: human "✗ qa deliberate load-time throw" exit 1; --json {"error":"qa deliberate load-time throw","conversions":[]} exit 1, parses
cli.plugin-manifest-build-contract 0 invalid manifest refused, no artifact pass 6a "✗ Cannot read objectstack.plugin.json in …" exit 1; 6b/6c "objectstack.plugin.json is invalid:" exit 1; 0 .osplugin after each
cli.plugin-manifest-build-contract 1 identity guarded at schema, located per shape pass 6b "✗ id invalid_type … received undefined"; 6c "✗ version invalid_format …pattern"; 6d "✗ id invalid_format: Invalid package id '' … reverse-domain"; all exit 1, no artifact; 6e no entry "✗ No entry module found" exit 1
cli.plugin-manifest-build-contract 2 packaging forks the artifact pass bundled: 3 files, picocolors inlined (createColors x4, no import); manifest-deps: 4 files incl package.json, dist/index.mjs keeps from "picocolors"
cli.plugin-manifest-build-contract 3 compiled manifest + publish reads before network pass manifest = authored + main dist/index.mjs + integrity map (manifest, SIGNATURE excluded) [+ schema defaults]; publish good -) "✗ Not logged in" after reading id@version; version-less -) "✗ Artifact manifest is missing id or version." exit 1
cli.plugin-manifest-build-contract 4 lint missing-engines-range scoped pass manifest w/o engines: warning protocol/missing-engines-range at manifest.engines.protocol fix "engines: { protocol: '^18' }"; manifest-less fragment: rule absent
cli.dev-automigrate-policy 0 safe applies exactly safe diffs, reports each, converges pass safe boot: "[schema-drift] auto-reconciled drop_column_default on qaam_item.owner_ref" (only reconcile); relax_not_null + orphan qa_gone still warned; 2nd safe boot 0 reconciles, schema unchanged
cli.dev-automigrate-policy 1 off explicit or omitted never touches schema pass off x2 and omitted: 3 drift warnings each, 0 reconciled, schema/rows md5 identical across each boot
cli.dev-automigrate-policy 2 NODE_ENV=production force-off pass "[schema-drift] autoMigrate='safe' is ignored under NODE_ENV=production — … Run 'os migrate' deliberately."; 0 reconciled; dump unchanged
cli.dev-automigrate-policy 3 gate composes; destructive never auto pass safe boot left orphan qa_gone (drop_column, destructive) and NOT NULL qa_req (relax_not_null, needs_confirm) in place, warned; schemaMode external arm not staged
cli.dev-automigrate-policy 4 ADR-0120 D4 tighten fails closed pass pin: sql-driver-unique-tenancy "auto-tightens at boot under autoMigrate: safe when the probe is clean" + "BLOCKS the tightening on duplicate NULL-organization rows — old index kept" pass
cli.dev-automigrate-policy 5 CLI injects safe only in dev pass keyless dev: auto-reconciled drop_column_default; plan 2 changes (1 safe,1 needs-confirm) -) 1 (0 safe); non-dev os serve over same drift: 2 warnings, 0 reconciled, qaam_item DDL unchanged

Reproduction rules (fails)

Derived item verdicts

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

Pin runs (Tier 1, RUNNER rule 6):

  • cli.migrate-plan-apply-json: packages/cli: vitest run src/utils/format.exit-code.test.ts src/commands/verify-tenancy-posture.test.ts --maxWorkers=1 -> 2 files, 11 passed
  • cli.verify-verdict-exit-mapping: verify-tenancy-posture.test.ts in the 11-passed batch above
  • cli.doctor-health-report: packages/cli vitest (one batch, 15 files, 230 passed) incl. doctor-env-provenance, doctor-tenancy-posture-report, doctor-ledger-dir-authority, doctor-ledger-posture-independence, doctor-ledger-read-failure, doctor-config-load-cause, doctor-node-env-default, doctor-unexamined-spec-tree
  • cli.doctor-deprecation-scan: doctor-deprecation-hint-commands.test.ts in the 230-passed batch
  • cli.migrate-duplicates-inventory: duplicates.contract/null-seam/pre-repair tests in the 230-passed batch
  • cli.datasource-introspect-codegen: packages/rest remote-tables-twin.equivalence.test.ts 10 passed; packages/services/service-datasource external-datasource-service.test.ts -t schema 3 passed; packages/cli datasource/envelope-unwrap.test.ts in 230 batch
  • cli.hook-body-extraction-gates: lower-callables.test.ts in the 230-passed batch
  • cli.dev-automigrate-policy: packages/drivers/driver-sql: vitest run sql-driver-schema-drift, sql-driver-unique-tenancy, sql-driver-index-drift --maxWorkers=1 -> 3 files, 59 passed

Fixture gaps

None.

Checklist-accuracy findings from this area close out on the wave anchor #23878; they are not extracted.

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out for this record (checklist-test §5), 2026-10-16T17:19Z. 16 pass · 0 partial · 1 fail of 17. The one fail is a stale spec: the product holds and the item pins old text. It is extracted to the re-point family card:

    Extracted: #23950 · cli.migrate-meta-codemod · clause 7
    

    The item's own restart condition fired: #9591 closed completed via #22142. os migrate meta --help now lists --write and --all, while the clause still asserts print-only. This record has no fixture gaps. Its checklist-accuracy findings close out on #23878. Closed by the domain:devx seat 1 PM (seat post #6023) · os-sales · session_014eFvbvGK4FjXvscggDNTD4, as part of the paced close-out of the #23878 wave.


    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