Skip to content

QA run · surface:cli (18/18) · 251a7dd4 · 2026-10-04 · 10 PASS / 2 PARTIAL / 6 FAIL / 0 BLOCKED / 0 NOT-RUN #21721

Closed

Description

@objectstack-fleet

17.7 pre-release verification, non-browser half: every runnable surface:cli item against origin/main at the run's start. Sibling records for the same subject cover surface:api and surface:build. Text only; the durable truth stays in docs/qa/platform-checklist/areas/.

Environment fingerprint

  • Framework (subject): 251a7dd4 (fix(organizations)!: … (#21666) (#21680)), dedicated detached worktree, pnpm install --frozen-lockfile && pnpm build → exit 0. CLI driven from the subject tree's built packages/cli bin.
  • Console: not built (.objectui-sha = ab187972); browser halves are not-run (frontend deferred, #21696).
  • Scratch projects: showcase copies and create-objectstack -t blank --skip-install scaffolds under /tmp/qa1770/{lane} (node_modules symlinked to the subject showcase's), never inside a checkout. Boots on lane ports 43101–43209.
  • Execution: lanes L3 (one item), L11, L12 + verifiers V5, V6 (RUNNER rule 7), Claude Code session session_018zT8d8NpiQ1ExhuNd5TxY6, 2026-10-04 08:10–11:10Z. Load notes as in the API record: pins that were SIGKILLed or timed out were re-run alone; every verdict rests on the clean re-run.

Scope

node scripts/checklist-select.mjs surface:cli --json → 18 runnable items, none hidden.

item rev verdict evidence (server truth / pin)
ai.mcp-stdio-fail-closed 4 PASS mcp plugin.test in 37/37; no key / bad key refuse to start; principal-bound RLS + FLS; revoked key dies
cli.dev-boot-contract 4 PARTIAL A1 /_console half not-run (frontend deferred); DB resolution order, fresh OS_HOME, port shift, stale-build warning all pass
cli.migrate-plan-apply-json 2 FAIL A1 os migrate plan/apply cannot boot the stock showcase or a blank scaffold — product defect; A5 in_sync_partial (stale clause); format.exit-code 4/4
cli.verify-verdict-exit-mapping 1 PASS verify-tenancy-posture green; six-status union, exit mapping both ways, --rls 38 PROVEN · 0 HOLES
cli.qa-suite-execution 6 PASS 7 of 8 action types; interpolation, located malformed-suite error, teardown
cli.flag-command-error-ux 2 PARTIAL A4 not-run: the registered surface is 33 commands/topics vs the 30 the clause pins; A1–A3 pass
cli.migrate-meta-codemod 3 FAIL A4 empty-range answer changed by fb39b385f1 (#17462, fixes #17134) — stale clause; A1–A3, A5–A8 pass
cli.doctor-health-report 2 PASS 11 doctor-* pins green; posture error exits 1, warnings exit 0
cli.doctor-deprecation-scan 3 PASS doctor-deprecation-hint-commands green; 9 rows at the seeded lines
cli.migrate-duplicates-inventory 4 FAIL A3 md5 differs (SQLite header bytes only; rows identical) — assertion defect; A4 blocked(product-bug: the migrate-plan defect); null-seam 11/11 · contract + pre-repair 7/7
cli.datasource-introspect-codegen 2 FAIL A6 validate on an unknown name exits 0 (vacuous ok by design, e634ecf6a) — assertion defect; A1 blocked(fixture: SQLite tables carry no schema)
cli.hook-body-extraction-gates 2 PASS lower-callables green; seven forbidden reasons verbatim, capability inference, legacy bundle skipped
cli.lint-severity-exit-contract 1 PASS severity groups, exit 1 on errors only, JSON reconciles, lint ⇔ build parity
cli.plugin-manifest-build-contract 1 FAIL A2 id: "" is refused by the Zod reverse-domain rule (097d26859, #18319) — stale clause
cli.dev-automigrate-policy 1 FAIL A6 a plain os dev (standalone stack) does not run autoMigrate:'safe' — product defect; sql-driver schema-drift 13/13 · unique-tenancy 23/23
integration-system.connector-stdio-default-deny 2 PASS mcp-provider 13/13; stdio denied by default and off-allowlist, boot aborts, no process spawned
integration-system.connector-descriptor-audit 2 PASS connector-descriptor-audit 9/9; loud warning, quiet carve-outs, live re-audit on reload
integration-system.external-schema-drift-gate 2 PASS runtime pins 39/39; fail / warn / ignore / checkOnBoot:false / armed interval

Totals: 10 PASS / 2 PARTIAL / 6 FAIL / 0 BLOCKED / 0 NOT-RUN. The 6 failing items carry 2 product defects and 5 checklist-clause fails (one item carries both). Every fail re-derived by V5 / V6.

Fails — reproduction rules and dispositions

Product defects

cli.migrate-plan-apply-json A1 — in examples/app-showcase (or a fresh create-objectstack qa -t blank scaffold), os migrate plan --database-url file:{any}.db. Expected the plan; actual exit 1 [Kernel] Dependency 'com.objectstack.service-automation' not found for plugin 'com.objectstack.connector.openapi' (connector.rest on the scaffold); os migrate apply --json --yes → {"error":"[Kernel] Dependency …"}, exit 1. The config requests automation through requires: ['automation'], which serve resolves but the schema-migration stack never reads, while the connectors hard-depend on it. Adding AutomationServicePlugin to a scratch config makes the plan exit 0. Verifier V5: CONFIRMED, severity high — every new blank app and the showcase. Also blocks cli.migrate-duplicates-inventory A4's matched control.

cli.dev-automigrate-policy A6 — blank scaffold with one org-scoped unique:true field and no datasources; os dev -d file:A.db, stop; replace the NULL-safe index with CREATE UNIQUE INDEX uniq_scaf_item_organization_id_qa_code ON scaf_item (organization_id, qa_code); os migrate plan lists [recreate_index] … (auto-applied at boot under dev autoMigrate: 'safe'); os dev --no-watch -d file:A.db. Expected auto-reconciled recreate_index and a COALESCE index; actual the warning only, index stays bare (twice). Host configs (the showcase) and OS_MODE=off boots do self-heal; the standalone default path builds its SQLite datasource without autoMigrate. Verifier V6: CONFIRMED, medium.

Checklist clauses (no product defect)

item · clause disposition what holds instead source
cli.migrate-plan-apply-json A5 stale clause an in-sync showcase DB answers in_sync_partial (2 federated objects unexamined); measured on a config with the A1 workaround 6c6157af05 (#13057, #13028)
cli.migrate-meta-codemod A4 stale clause an empty range prints ⚠ No migration step exists for protocol N → N …; "Nothing to migrate" is for a non-empty range with no changes; default --to is now 18 fb39b385f1 (#17462, fixes #17134)
cli.migrate-duplicates-inventory A3 assertion defect rows and _objectstack_sequences are byte-identical (what the command declares); the whole-file md5 moves on two SQLite header bytes (change counter) duplicates.ts:61-66; driver connect pragma (low card below)
cli.datasource-introspect-codegen A6 assertion defect datasource validate {unknown} answers a vacuous ok by design; list-tables / introspect do exit 2 e634ecf6a (#10537 / #10960)
cli.plugin-manifest-build-contract A2 stale clause id: "" fails the Zod reverse-domain rule with a located error; the build.ts post-parse guard is unreachable 097d26859 (#18319)

Partial-coverage gaps

Close-out follows in a comment.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 4, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out

    Extracted: #21732 · cli.migrate-plan-apply-json · acceptance[0]
    Extracted: #21733 · cli.dev-automigrate-policy · acceptance[5]
    Extracted: #21734 · cli.migrate-duplicates-inventory · outside the item's clauses
    Parked-on: #21735 · cli.migrate-plan-apply-json · acceptance[4]
    Parked-on: #21735 · cli.migrate-meta-codemod · acceptance[3]
    Parked-on: #21735 · cli.migrate-duplicates-inventory · acceptance[2]
    Parked-on: #21735 · cli.datasource-introspect-codegen · acceptance[5]
    Parked-on: #21735 · cli.plugin-manifest-build-contract · acceptance[1]
    
    card from severity (verifier)
    #21732 migrate-plan-apply-json A1 (also blocks duplicates-inventory A4's control) high — os migrate plan/apply unusable on every new blank app and the showcase
    #21733 dev-automigrate-policy A6 medium
    #21734 found in migrate-duplicates-inventory A3 low

    Both product defects predate 17.6.0 (#21732 since fc8a33935c, #12952).

    Candidate observations — not verified, not extracted

    • os dev -d memory:// refusal says OS_DATABASE_URL "memory://" selects … although the user passed -d.
    • os migrate plan prints "1 table(s) to create, 1 column(s) to add" then "0 change(s)"; apply then "Applied 0 change(s)" after creating them.
    • os migrate meta says "… change(s) for this stack" while listing every semantic entry in range regardless of the stack.
    • os dev --no-restart says the server keeps its booted build, but the artifact watcher reloads it.
    • migrate duplicates --object X does not narrow liveConditions.
    • An afterInsert hook that throws is answered 400, not 5xx; os verify logs "Port 0 is in use"; os test prints Error: Error: and stacks for plain assertion failures.

    Checklist-accuracy findings

    1. flag-command-error-ux: the surface is 20 commands + 12 topics (+ g); secret, storage are new.
    2. migrate-plan-apply-json: 13 subcommands, not nine.
    3. migrate-meta-codemod: "current major" is ambiguous (runtime 17, --to default 18).
    4. doctor-health-report A1 misses the unconditional "Package-authored scheduled work" row and the "Platform protocol" row.
    5. qa-suite-execution step 7's "no request in the server log" is uncheckable (os dev logs no requests).
    6. dev-automigrate-policy step 1 staging is stale (ADR-0113: required creates no NOT NULL; relax_not_null is needs_confirm); widen_varchar never fires on SQLite; a working safe op is the legacy bare-unique → NULL-safe recreate; os migrate plan does not examine a config-declared non-default datasource.
    7. hook-body-extraction-gates: the title's "(expected-fail)" and A7's silent default are stale since Hook-body build gates: @capabilities override dead through os build; require() pattern dead; default build silently bundles forbidden patterns #10678; FORBIDDEN_PATTERNS has 9 entries; implicit-return arrows lower as return (expr); with no isExpression key.
    8. plugin-manifest-build-contract: the negative "nothing re-verifies integrity (manifest.integrity declares per-file artifact digests the spec says the runtime re-verifies at unpack — nothing computes them and nothing checks them #11331)" is stale for publish; the compiled manifest carries schema defaults.
    9. lint-severity: --json also carries strict, failing, conversions; the "no staged suggestion fixture" knownGap can close (an expression approver without onEmptyApprovers).
    10. datasource-introspect-codegen: "schema matches nothing → No remote tables found" is unreachable on SQLite.
    11. migrate-duplicates-inventory: the within-partition repeat needs the partitioned autonumber index dropped first; the kernel:ready seed needs idx_sys_view_def_active dropped.

    Generated by Claude Code

  2. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Close-out complete: the blocked partial gaps are parked. The record closes completed

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-06T17:08Z. The maintainer approved clearing the open qa-run records' close-out debt: 「同意,动手」. ⛔ No verdict on this record is changed.

    Parked-on: #22017 · cli.flag-command-error-ux · A4 the clause pins 30 variants, the surface is 33
    Parked-on: #22017 · cli.datasource-introspect-codegen · A1 narrowing half blocked(fixture)

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