Skip to content

The v17 boot refusal sends the operator to the ownership ceremony without the composition it needs (NODE_ENV=development or OS_AUTH_SECRET), and names a bare --apply the ceremony refuses without --plan-file #23871

Closed

Description

@objectstack-fleet

Filing gate: ① a product defect with a public door, finding class (a): operator text that misleads. reach: the refusal os dev / os serve print on a v17-shape database (organizationOwnershipRefusalMessage, packages/runtime/src/organization-ownership-boot-guard.ts), followed as written, measured once on @objectstack/* 18.0.0-next.2. Filed by a side session of the maintainer's local hotcrm upgrade (session local_f4c0ec33-a0e1-425c-a1fd-59bcb3256ad8). ⛔ Not a claim; grade and lane are triage's.

Reader who acts: triage grades and routes it. The text is packages/runtime (the boot guard); the composition it should name is packages/cli (bootSchemaStack's auth gate, describeSecurityPluginComposition in packages/cli/src/utils/schema-migration-plugins.ts).

Dedupe: REST issue search, all states, on objectstack-ai/objectstack: organization-ownership NODE_ENV → 3 hits; organization-ownership "OS_AUTH_SECRET" → 3; "v17 organization-ownership shape" → 6; OrganizationOwnershipBootGuard → 0; "organization-ownership" boot refusal "plan-file" → 13. None is this defect. The nearest:

Reproduction

  • Database: a copy of the maintainer's local hotcrm dev.db, a long-lived SQLite dev database first created on 17.x.
  • Release: hotcrm on @objectstack/* 18.0.0-next.2.
  • Safety: every ceremony run was on the copy. The original was not touched.
  1. objectstack dev refuses to start. Its text, verbatim from organizationOwnershipRefusalMessage: "Run 'os migrate organization-ownership' (review its plan), then 'os migrate organization-ownership --apply', and start again."
  2. The operator follows it from a shell: no OS_AUTH_SECRET (the dev boot never needed one), NODE_ENV unset.
    • The ceremony boots its own stack, and the auth gate composes no security plugin (no secret, not a development boot).
    • --apply's authored-conversion step blocks, because the catalog resolves none of the platform's shipped sets and positions.
  3. Control: the same copy with NODE_ENV=development. The ceremony composes as the dev boot does, and that step passes. It then meets the next blocker, which is filed separately.

What is wrong with the refusal

Two things, in one sentence an operator copies:

Ask (the fixing seat's call)

  • The refusal names the sequence the command accepts: os migrate organization-ownership --out PLAN, review the file, then --apply --plan-file PLAN (with --backup-taken, or a yes at the prompt).
  • The refusal, or the ceremony when it runs, tells the operator to run the ceremony in the composition the server boots with, and how to spell that for this command. For a dev database that is NODE_ENV=development, or the deployment's OS_AUTH_SECRET.
  • Whether the guard can know which case applies (it runs inside the boot, which knows whether it is a development boot), or the ceremony gains its own spelling, is the fixing seat's call. ⛔ The ceremony still refuses when uncomposed: nothing is guessed.
  • Pin the refusal text, both sentences.

Related: #15194 (ADR-0131 epic) · #23461 (the boot refusal) · #23437 (S4, --plan-file) · #23359 / #23540 · #23513.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p1 · target:v18 · domain:cli · area:access · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T11:02Z

    Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.

  2. self-assigned this
    on Oct 16, 2026
  3. hotlong commented on Oct 16, 2026

    @hotlong
    Contributor

    Claim: seat (maintainer-directed session), one PR for #23871, #23872 and #23873
    Session: session_ab6957e6-cd01-4205-aecd-c3b7aadd37b6
    Account: hotlong
    Branch: claude/hotcrm-database-upgrade-error-c6cd05
    Domain: domain:cli
    File surface: packages/cli/src/{commands/dev.ts,commands/serve.ts,commands/migrate/organization-ownership.ts,utils/organization-ownership-*,utils/dev-*,utils/schema-migration-plugins.ts}, packages/runtime/src/organization-ownership-boot-guard*, docs/adr/0131-*
    Thread-read: 6214084198

    The code is already written on the branch above. The maintainer ruled the decision on #23873 in this session on 2026-10-16: adopt the legacy admin-stamped shipped sets automatically, and warn in production. The ruling is recorded verbatim in the ADR-0131 amendment the PR carries.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsbugSomething isn't workingdomain:clifindingpriority:p1High: required for production / M2target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions