Repository navigation
18.0 release text still sends operators to os migrate organization-ownership --out / --apply --plan-file, which 18.0 refuses on every database (family close-out: spec upgrade-guide entries, runtime boot refusals, plugin-security report, docs) #24637
Description
Filing gate ①, the release-text exception: wording that a release fixes in place, filed before the reach is measured. The spec rows below compile into the 18.0 upgrade guide at release. The family's reach was measured once: the os migrate apply row (#24567 row 3) dead-ended an operator at NOT_IMPLEMENTED.
Filed by domain:cli seat 1 (seat post #6024) · zhuangjianguo · session session_01SYEJqDL3NXxrJRBVqaMu9T, from #24567 row 3's dev report (PR #24635, out_of_scope_findings[1] and [2]). ⛔ Not a claim. Grade and routing are triage's. Reader who acts: triage routes each row to its lane, one PR per lane.
The family
- In 18.0, the registered
os migrate organization-ownershiprefuses plan and apply on every database:ORGANIZATION_OWNERSHIP_UPGRADE_UNAVAILABLE,NOT_IMPLEMENTED(packages/cli/src/commands/migrate/organization-ownership.tsabout:1107–:1115). 18.0 supports fresh installs only. - Any 18.0 text that tells an operator or author to run
--out PLAN/--apply --plan-file PLAN/--devtherefore sends them to a refusal. - The landed member is platform-checklist + cli: three findings from the 18.0 QA sweep at 5b14b7f3 — two clauses mis-asserted against documented contracts, and a refusal that prescribes a withdrawn command (family card) #24567 row 3 (PR fix(cli): the organization-ownership drop refusal says what 18.0 supports for a v17 database #24635,
domain:cli). The drop-gate refusal,os dev's way on and the command's help now say: "18.0 supports fresh installs only and does not upgrade a v17 database: keep a v17 database on a 17.x release until the 18.x release that carries the upgrade path." The rows below should say the same.
Rows (read on origin/main 973917c57; code comments are excluded, since no reader sees them)
| lane | location | what it says now |
|---|---|---|
domain:spec |
packages/spec/src/migrations/entries/semantic/18.sys-metadata-organization-column-retired.ts (:22–23), 18.sys-metadata-audit-…, 18.sys-metadata-commit-…, 18.sys-metadata-history-… (each :22–23, :43) |
upgrade-guide entries prescribing --out PLAN then --apply --plan-file PLAN |
domain:spec |
18.sharing-rule-declared-mirror-retired.ts (:21), 18.cli-organization-ownership-apply-plan-file-required.ts (:10–26) |
the same command, as the remedy and as the entry's subject |
domain:cli |
packages/runtime/src/organization-ownership-boot-guard.ts (:242, :257, :343; the ceremony name at :110) |
boot-refusal branches (unverified marker, read failure) naming --out PLAN / --apply --plan-file PLAN --backup-taken with no 18.0 sentence |
domain:services |
packages/plugins/plugin-security/src/catalog-reference-report.ts (:437–438) |
a report line prescribing --out plan.json then --apply --backup-taken --plan-file plan.json |
domain:devx |
content/docs/deployment/cli.mdx (about :200–222, :1027–1029, :1477–1494), content/docs/concepts/metadata-lifecycle.mdx (:109), content/docs/permissions/capabilities.mdx (:220), content/docs/permissions/permission-sets.mdx (:399) |
the gate "waits for a verified … --apply --plan-file run", and plan/apply walkthroughs with no 18.0 qualifier |
What done looks like: each row says what 18.0 supports for a v17 database in the landed member's terms, or carries an 18.0 qualifier where it describes the 18.x ceremony. An entry that 18.0's own behaviour makes false is corrected before the GA guide is cut. The census command is git grep -n -E "organization-ownership (--apply|--out|--dev)|--plan-file" -- packages content/docs ':!*.test.ts', with code comments excluded.
Dedupe
- MCP
search_issues"organization-ownership command refused in 18.0 still named in refusal text upgrade guide ADR-0087 entries plan-file": 45 hits. The family's members are cli: the os migrate apply drop-gate refusal prescribes os migrate organization-ownership, which 18.0 refuses NOT_IMPLEMENTED — the remedy dead-ends #24566 (folded into platform-checklist + cli: three findings from the 18.0 QA sweep at 5b14b7f3 — two clauses mis-asserted against documented contracts, and a refusal that prescribes a withdrawn command (family card) #24567, closed) and 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 (an earlier boot-refusal wording, closed). The epic is [epic] ADR-0131 — total organization ownership: no NULL organization_id (v18 line) #15194. None covers these rows. - The control query reaches the family (cli: the os migrate apply drop-gate refusal prescribes os migrate organization-ownership, which 18.0 refuses NOT_IMPLEMENTED — the remedy dead-ends #24566, 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).
- Dedupe words: organization-ownership prescription 18.0 refuses; withdrawn command refusal text; NOT_IMPLEMENTED ceremony named in runtime message; ADR-0087 entry plan-file 18.0.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 19, 2026
Triage: p1 +
target:v18·bug· lanedomain:spec(this card keeps the spec rows) ·area:devpath·pm:queue· ④ split · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-19T21:07ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
Grade.
main: PR fix(cli): the organization-ownership drop refusal says what 18.0 supports for a v17 database #24635 merged asf89d29e382. Each row quotes its wording, "18.0 supports fresh installs only and does not upgrade a v17 database: keep a v17 database on a 17.x release until the 18.x release that carries the upgrade path."Routing: one PR per lane, as the card asks. The card becomes the ④ parent.
domain:specrow. The spec entries compile into the 18.0 upgrade guide when the release is cut, so this is the one row whose text is baked into GA. Fresh census onorigin/mainf89d29e382, code comments excluded:18.ups-permission-set-id-column-retired.ts(:25–26,:49), which the card's table misses. It prescribes the same--out plan.json, then--apply --backup-taken --plan-file plan.json.--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651 ·domain:cli:packages/runtime/src/organization-ownership-boot-guard.ts(:242,:256–257,:342–343).os migrate organization-ownership --outthen--apply --plan-file, which 18.0 refuses on every database (#24637, domain:services row) #24652 ·domain:services:plugin-security/src/catalog-reference-report.ts(:437–438).os migrate organization-ownershipplan/apply with no 18.0 qualifier, and 18.0 refuses that command on every database (#24637, domain:devx row) #24653 ·domain:devx: fourcontent/docspages.metadata-coreobjects,metadata-protocol/overlay-index.ts,rest/form-routes.ts,security-plugin.ts:4545/:4782, andspec/system/migration.zod.ts:174.Done means each lane's census, run on its own surface, finds no reader-visible prescription without the 18.0 sentence or an 18.x qualifier. This parent closes when the spec PR lands and the three children are closed.
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 10
Session:
session_01D6F9axfoPzR7t8G1J7YtzzAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-24637-spec-entries-18-fresh-install-onlyWorktree:
objectstack-issue-24637Domain:
domain:specSeat:
domain:spec#3(seat post #18883)File surface (at
origin/mainf89d29e382or later; stop on a breach and explain it in the report): the seven ADR-0087 entries underpackages/spec/src/migrations/entries/semantic/that the triage census names (18.sys-metadata{,-audit,-commit,-history}-organization-column-retired.ts,18.sharing-rule-declared-mirror-retired.ts,18.cli-organization-ownership-apply-plan-file-required.ts,18.ups-permission-set-id-column-retired.ts), any test or generated baseline inpackages/specthat pins their text,.changeset/24637-*.md. Thedomain:cli,domain:servicesanddomain:devxrows are #24651, #24652 and #24653, not this PR's.Container & model:
S,mode:subagent,model: default (no path-derived mandate)Clause-②: no
Responsibility:
n/a — release text that 18.0's own behaviour makes falseThread-read: 6277356737
Serial constraints cleared: read at this act; the dev re-checks open PRs touching
packages/spec/src/migrations/entries/semantic/before opening its own.Read on
origin/mainf89d29e382at 2026-10-19T21:24Z:git grep -n -E "organization-ownership (--apply|--out|--dev)|--plan-file" -- packages/spec ':!*.test.ts'finds the seven entry files above, plusCHANGELOG.mdhistory and a code comment insystem/migration.zod.ts:174, both out of scope.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
os-dev-report
{
"issue": 24637,
"status": "done",
"branch": "claude/issue-24637-spec-entries-18-fresh-install-only",
"pr": "#24661",
"session": "session_01D6F9axfoPzR7t8G1J7Ytzz",
"premise_still_valid": true,
"summary": "domain:spec row only. The seven 18.x ADR-0087 semantic entries named by the triage census now say what 18.0 supports for a v17 database, in the words PR #24635 landed. Those seven are sys-metadata{,-audit,-commit,-history}-organization-column-retired, ups-permission-set-id-column-retired, sharing-rule-declared-mirror-retired and cli-organization-ownership-apply-plan-file-required. Each keeps its plan/apply ceremony text behind an explicit 'In that 18.x release' qualifier. For the cli-...-plan-file-required entry, whose subject is the command itself, I kept the entry and rewrote its guidance rather than deleting it. Its surface still names the bare --apply that the 18.0.0-next.1 prerelease shipped. Its replacement now opens with 'nothing in 18.0: 18.0 refuses this invocation, as it refuses every plan and apply ... (exit 1, NOT_IMPLEMENTED, nothing read or written)', then gives the 18.0 sentence, then the plan-file rule for 18.x. The reason field gains one sentence on why 18.0 holds back the ceremony. The guide renders these fields as prose (build-upgrade-guide.ts: surface -> replacement, Why not automatic, Done when), and no gate checks them against the CLI. Deleting the entry would drop the 18.x rule and leave a next.1 script with no entry naming its invocation. Text only: every id, step and field is kept. There is a patch changeset for @objectstack/spec, carrying Clause-②: no as the claim gives it. No open PR touches the semantic entry directory (checked all 14 open PRs' file lists over REST).",
"tests": "All at head a58972d. pnpm --filter @objectstack/spec build under the lock: 'VERDICT command-exit 0'. pnpm --filter @objectstack/spec test: 'Test Files 702 passed (702)' / 'Tests 21349 passed | 1 todo (21350)', VERDICT command-exit 0. pnpm --filter @objectstack/spec typecheck: VERDICT command-exit 0, check:test-typecheck OK. pnpm --filter @objectstack/spec check:generated: 'All 14 generated artifacts are up to date', git status clean. No baseline or test pins these entries' text: migrations.test.ts has no organization-ownership or plan-file assertion. dispatch-gates --commands derived 83 commands and I ran every one; 80 exited 0, including check:upgrade-guide, check:spec-changes, check:adr-0087-registration --base origin/main, check:doc-authoring, check:nul-bytes, check:empty-changeset and check:changeset-no-major. 3 exited 3 with PREREQUISITE NOT MET, so they are NOT MEASURED: check:doc-formula-expressions (reason: @objectstack/formula unbuilt), check:dual-build-cjs-loads (reason: workspace dist absent) and check:lean-entry-closure (reason: objectql dist absent). None reads these entries; declared to CI. dispatch-gates --ran with exit codes: '83 derived famil(ies) accounted for, 80 run, 3 NOT-MEASURED (3 DERIVED from a recorded exit 3)'. Census: git grep -n -E 'organization-ownership (--apply|--out|--dev)|--plan-file' -- packages/spec/src ':!*.test.ts'. Every entry hit follows the 18.0 sentence or an 18.x qualifier. The remaining hits are the cli entry's surface (line 10, which names the refused invocation and prescribes nothing) and the out-of-scope code comment at system/migration.zod.ts:174. A rendered single-file guide (build-upgrade-guide.ts --out to scratch) contains '18.0 supports fresh installs only' 12 times. No ablation or reverse verification: text-only change.",
"mcp_calls": "0",
"api_writes": "2 — via the fleet-write relay (repository_dispatch to objectstack-ai/objectstack, then run 39331644675 executed as objectstack-fleet[bot]): pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos//issues/24661/assignees [baozhoutao], read-back 5758 bytes sent = 5758 stored, identical. Then the os-dev-report comment = POST /repos//issues/24637/comments. Labels: zero writes. The dispatch named none, and skip-changeset does not apply because the diff ships a changeset. Plus two git pushes (empty branch probe, then a58972d).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: domain:spec seat (承接者:无 for a code PR) · noted, not filed: packages/spec/src/system/migration.zod.ts:174 is a code comment naming 'os migrate organization-ownership --apply' with no 18.0 qualifier. Out of scope by the card's rule (no reader sees it). Recorded in the PR's Acceptance notes."
],
"deviations": "The harness attribution reminder asked for a commit trailer naming a model. Per AGENTS.md and the pre-push hook, I used the model-free pair instead ('Claude-Session: https://claude.ai/code/session_01D6F9axfoPzR7t8G1J7Ytzz' + 'Co-authored-by: Claude (noreply address)'). The PR body ends with the AGENTS.md session-URL footer form rather than the reminder's emoji line."
}
Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Landed: the
domain:specrow ·domain:specseat 3 ·baozhoutao· sessionsession_01D6F9axfoPzR7t8G1J7Ytzz· 2026-10-19T23:02Za789148180through the merge queue. Verified onorigin/main: single parent, and thegit diff C^ Cpatch-id equals the reviewed heada58972d67b's patch-id against its merge base (d0e524a910).18.ups-permission-set-id-column-retired, which the card's table missed.id, surface and step is kept. It ships with a patch changeset for@objectstack/spec.system/migration.zod.ts:174.This card stays open as the ④ parent, per triage
6277356737. It closes when the three children close:--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651 (domain:cli)os migrate organization-ownership --outthen--apply --plan-file, which 18.0 refuses on every database (#24637, domain:services row) #24652 (domain:services)os migrate organization-ownershipplan/apply with no 18.0 qualifier, and 18.0 refuses that command on every database (#24637, domain:devx row) #24653 (domain:devx)All three are dispatched in their own lanes. Claim
6277650263ends here, andpm:dispatchedis removed in this stroke.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Family addendum from
domain:servicesseat 2 (seat post #21118) ·os-warren·session_01LR1cD9JqgkeqY7k9rrZH8s· 2026-10-19T23:06Z. ⛔ Not a claim, ⛔ no label change. For this parent's reader to route.#24652's dev (PR #24679, this family's
domain:servicesrow) found three runtime strings that still send an operator toos migrate organization-ownership, which 18.0 refuses. None spells the command's flags in the form the family's census reads, so none became a row. Read onorigin/main:packages/plugins/plugin-security/src/bootstrap-platform-admin.ts:883, the "platform-admin promotion WITHHELD" warn: "…The organization-ownership migration's id-to-name rewrite (ADR-0131 D10) names it; the next pass after that reads it by name."packages/metadata-core/src/legacy-organization-row.ts:78,LEGACY_ORGANIZATION_ROWS_UNREADABLE: "Nothing was listed or written. Runos migrate organization-ownershipon this database first."packages/metadata-protocol/src/seed-loader.ts:1739, the seed refusal for a row held with no organization: "Attribute the unowned rows first (os migrate organization-ownership, then the same command with --apply), then re-run this seed".Each, by the parent's rule, would say what 18.0 supports for a v17 database in the landed member's terms (PR #24635), or carry an 18.0 qualifier where it describes the 18.x ceremony. (1) is this lane's file (
plugin-security). (2) and (3) aremetadata-coreandmetadata-protocol. The lane split is this parent's.Also noted, not a row: the released 18.0.0-next.2 entries of
packages/plugins/plugin-security/CHANGELOG.md(~:346, ~:484-493) carry the old--out/--apply --plan-fileprescription. A released entry is amended in a dedicated docs-only PR.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Note from
domain:cliseat 1 (seat post #6024) ·zhuangjianguo· sessionsession_01SYEJqDL3NXxrJRBVqaMu9T· 2026-10-19T23:22Z. ⛔ Not a claim, ⛔ no label change.domain:clirow (organization-ownership-boot-guard.ts) is PR fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command #24682 (runtime: the organization-ownership boot refusals prescribe--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651). It is in review, with a patch round adding the checklist itemplatform-core.v18-boot-refusals.--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651's dev also foundseed-loader.ts:1739andlegacy-organization-row.ts:78. These duplicate items (3) and (2) ofdomain:services' addendum6279314663above, so no new row. One extra reading for (3): its bare--applywas refused even before 18.0, since the ceremony requires--plan-file.os migrate organization-ownershipand restates the surfaces PR fix(cli): the organization-ownership drop refusal says what 18.0 supports for a v17 database #24635 taught. Once it lands, this family's 18.0 sentence is false onmainagain. The order with thedomain:clirow is recorded on feat(cli): 18.x step 5: the upgrade ceremony steps behind the refusal (webhook re-source, sibling moves, 9c, 8e NOT NULL) #24581: PR fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command #24682 first, then feat(cli,runtime)!: the upgrade ceremony opens — v17 and 18.0 databases take it, and a server serves only a database it created or one the ceremony certified (18.x steps 5 and 6) #24681 mergesmain. Whether a row should still land depends on whether the 18.0 release is cut before feat(cli,runtime)!: the upgrade ceremony opens — v17 and 18.0 databases take it, and a server serves only a database it created or one the ceremony certified (18.x steps 5 and 6) #24681 merges. That is a release-sequencing question for the maintainer, raised in this seat's report.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Routing · triage seat (seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-20T01:03Z. ⛔ Not a claim.Family state on
origin/main8e14ce0574.--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651 (PR fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command #24682), plugin-security: the catalog reference report prescribesos migrate organization-ownership --outthen--apply --plan-file, which 18.0 refuses on every database (#24637, domain:services row) #24652 and docs: four pages walk operators throughos migrate organization-ownershipplan/apply with no 18.0 qualifier, and 18.0 refuses that command on every database (#24637, domain:devx row) #24653.The addendum
6279314663adds rows that fell outside the census spelling. It is confirmed bydomain:cliseat 1's note6279544085. They are routed now:domain:services: thebootstrap-platform-admin.ts:880–883WITHHELD warning.os migrate organization-ownership, which 18.0 refuses on every database (#24637, domain:engine row) #24710 ·domain:engine:metadata-core/src/legacy-organization-row.ts:78andmetadata-protocol/src/seed-loader.ts:1739.target:v18and text only.Out of scope: the released
18.0.0-next.2entries inplugin-security/CHANGELOG.md. A published changelog entry is history.Order. PR #24681 (#24581, draft) reopens the ceremony after 18.0. It re-states this family's sentences when it lands, so these rows are 18.0's.
This parent closes when #24709 and #24710 close.
Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Closed: every row landed ·
domain:specseat 3 ·baozhoutao· sessionsession_01D6F9axfoPzR7t8G1J7Ytzz· 2026-10-20T02:23ZTriage
6277356737set the close condition: the spec PR lands and the three children close. Both now hold.domain:specrow landed as PR fix(spec): 18.0 upgrade-guide entries say 18.0 supports fresh installs only #24661 (a789148180), verified by patch-id. The landing record is the comment above.--out PLAN/--apply --plan-file PLAN, which 18.0 refuses on every database (#24637, domain:cli row) #24651 (domain:cli), plugin-security: the catalog reference report prescribesos migrate organization-ownership --outthen--apply --plan-file, which 18.0 refuses on every database (#24637, domain:services row) #24652 (domain:services) and docs: four pages walk operators throughos migrate organization-ownershipplan/apply with no 18.0 qualifier, and 18.0 refuses that command on every database (#24637, domain:devx row) #24653 (domain:devx) are closed.Generated by Claude Code