Repository navigation
fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command - #24682
Conversation
…supports and name no step of the withdrawn ceremony command In 18.0, os migrate organization-ownership refuses plan and apply on every database. Three branches of the v18 boot refusal (the v17 shape, the no-column marker branch, and the failed column read) still prescribed its --out PLAN / --apply --plan-file PLAN --backup-taken steps. Each now closes on the sentence os migrate apply's drop gate and os dev already use: 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. An unreadable marker or column read says to fix the read first. Refusal text only: the refusal code, the refused tables and the boot outcome do not move. The unit and kernel pins and the dogfood step-1 pin that named the command are updated, with one pin per branch asserting the sentence and the absence of the command's steps. Claude-Session: https://claude.ai/code/session_01SYEJqDL3NXxrJRBVqaMu9T Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check5 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 26 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 799e034dffe255a19aafcff1fda369064ad8cbc5 && git checkout 799e034dffe255a19aafcff1fda369064ad8cbc5
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 92ce3af404a9b6ca16881a89f2e841d29da52175 21f7e90f46d24a52bca2678ffb8aba46c5f30c5b && git checkout -B drift-repro 92ce3af404a9b6ca16881a89f2e841d29da52175 && git merge --no-ff 21f7e90f46d24a52bca2678ffb8aba46c5f30c5b
node scripts/docs-audit/affected-docs.mjs --json 92ce3af404a9b6ca16881a89f2e841d29da52175 |
…xt (revision 4)
platform-core.v18-boot-refusals asserted that the organization-ownership
boot refusal names `os migrate organization-ownership`. In 18.0 that
command refuses on every database and the refusal no longer names it or
its steps, so a run against the current text would record FAIL on a
correct product. The title and acceptance[1] (clause, verify) now assert
the named tables, the closing 18.0 sentence ("18.0 supports fresh
installs only and does not upgrade a v17 database: ...") and the absence
of the command and its --out PLAN / --apply --plan-file steps. The code
literal note is kept. Revision 3 -> 4 with a history row.
Claude-Session: https://claude.ai/code/session_01SYEJqDL3NXxrJRBVqaMu9T
Co-authored-by: Claude <noreply@anthropic.com>
席位核对 — ACCEPT
Generated by Claude Code |
Fixes #24651
Clause-②: no (refusal text only: the refusal code
ORGANIZATION_OWNERSHIP_MIGRATION_REQUIRED, the refused tables and the boot outcome do not move)In 18.0,
os migrate organization-ownershiprefuses plan and apply on every database (ORGANIZATION_OWNERSHIP_UPGRADE_UNAVAILABLE,NOT_IMPLEMENTED). Three branches of the v18 boot refusal inpackages/runtime/src/organization-ownership-boot-guard.tsstill sent the operator to that command's--out PLANand--apply --plan-file PLAN --backup-taken. Each branch now closes on the sentence the landed member of this family (PR #24635,f89d29e38) put intoos migrate apply's drop gate andos dev's way on:A development boot (
{ dev: true }, asos serve --devcomposes the guard) says "a v17 development database", the exact wording of the landedos devtext. No branch names the command or any step of it.ceremonyCommand()(which only built the--devcommand name) is gone. Thedevoption stays, and still changes the text. The refusal code, the refused tables,isOrganizationOwnershipBootRefusal, the plugin's ordering and every boot outcome are unchanged. This is thedomain:clirow of the family close-out #24637.Branch map
findV17ShapeTablesfinds a table whose object declares no organization column (systemFields.tenant: false, no declaredorganization_id) but still has a physicalorganization_id, and the marker is absent, unverified or unreadableorganizationOwnershipRefusalMessage,tablesnot empty (was about:252–:258)sys_migrationrowadr-0131-organization-ownershipexists but is not verified: a ceremony ran every step and its post-check found discrepanciesorganizationOwnershipRefusalMessage,tablesempty, markerunverified(was about:239–:243)unreadable(was about:239–:243)findV17ShapeTablesitself threw while reading a table's columnsassertOrganizationOwnershipMigrated'scatch(was about:339–:344)The card's ":242" is B1 and B2 (one return statement), ":256–257" is A, and ":342–343" is C. A marker that is absent with no v17 table, and a verified marker, still boot.
Before and after, per branch
Rendered by importing the guard at
bfc1539fe(before) and at this PR's head (after) and calling it. TABLES stands for the table list. The--devbefore-texts are the same withos migrate organization-ownership --dev.A, v17 shape (marker absent; unverified and unreadable differ only in the state clause)
B1, marker not verified
B2, marker unreadable
C, column read failed
Census:
packages/runtimegit grep -n -E "migrate organization-ownership|--plan-file|--out PLAN|backup-taken|ceremony" -- packages/runtimeat the base, every hit read:organization-ownership-boot-guard.tsabout:242,:256–:257,:342–:343organization-ownership-boot-guard.ts:110ceremonyCommand()devoption now selects "development database".organization-ownership-boot-guard.ts:19,standalone-stack.ts:336:19("says which command to run") was corrected anyway, because it described this behaviour.packages/runtime/CHANGELOG.md:473,:481,:912(and:296,:444,:900,:913)seed-loader-null-organization-holder-real-driver.integration.test.ts:215'os migrate organization-ownership'in@objectstack/metadata-protocol's seed-loader refusalpackages/metadata-protocol/src/seed-loader.ts, outside this lane (see Acceptance notes)action-execution.ts,domain-handler-registry.ts,flow-clone.ts,sandbox/quickjs-runner.ts,security/security-catalog.testkit.ts)docs/qa/platform-checklist/areas/platform-core.json, itemplatform-core.v18-boot-refusals(outsidepackages/runtime)acceptance[1]expected the refusal to name the command21f7e90f4)Met and not pre-empted: branch A also reaches a database that 18.0 itself created, when one of its objects newly declares
systemFields: { tenant: false }. This PR still calls such a database "still in the v17 organization-ownership shape". The 17.x sentence is false for that database, and this PR adds no sentence for it. That wording is the open maintainer decision in #24638, and #24638 remains open.Pins and the ablation
organization-ownership-boot-guard.test.ts: the old pins on the command text are rewritten. A new block holds one pin per branch: A (absent, unverified and unreadable markers), B1, B2, C, and a development boot across all four. Each asserts the refusal code, the closing text (B2 and C with "Fix the read, then start again." before it), and that the message matches none ofos migrate organization-ownership,--plan-file,--out PLAN,--backup-taken.organization-ownership-boot-guard.kernel.test.ts: case 4 (B1 on a real kernel) asserted--apply --plan-file PLAN --backup-taken. It now asserts the 18.0 sentence and the absence.packages/qa/dogfood/test/organization-ownership-boot-refusal-order.dogfood.test.tsstep 1 asserted the refusal contains'os migrate organization-ownership'. It now asserts the 18.0 sentence and the absence. Dogfood runs only onmain's full battery, not on this PR's CI, so it was run locally (below).docs/qa/platform-checklist/areas/platform-core.json, itemplatform-core.v18-boot-refusals, revision 3 to 4 (patch round 1, commit21f7e90f4): the title andacceptance[1](clause, verify) asserted that the refusal namesos migrate organization-ownership. They now assert the named tables, the closing 18.0 sentence, and 0 hits for--out PLAN,--plan-fileand the command. The ⛔ on the code literal is kept, and a history row cites fix(runtime): the organization-ownership boot refusals say what 18.0 supports and name no step of the withdrawn ceremony command #24682.7ac4f50e9:node scripts/ablation-replace.mjsput branch C's old "Fix the read, or run the ceremony ('os migrate organization-ownership --out PLAN', then '… --apply --plan-file PLAN --backup-taken'), then start again." back. On disk: anchor x1 to x0, replacement x0 to x1, blob65f1c9e2todad453f6. The unit file then ran 2 failed and 20 passed. The red pins were "a column read that failed: fix the read first" and "a development boot says the same … in every branch". The restore leg: blob back to65f1c9e2(HEAD),git diff HEADempty. The unit test imports the guard by relative path (source), so no build ordistleg applies.Tests and gates (code at
7ac4f50e9; the union, wide families, lint and dogfood re-run at21f7e90f4, the final commit)@objectstack/runtime, every project:pnpm --filter @objectstack/runtime test(projectlocal) passed 425 files, 6676 tests, 19 skipped.test:repo(projectrepo) passed 3 files, 808 tests.typecheckpassed:tsc --noEmit, pluscheck:test-typecheckOK with the debt ledger held.tsc -p tsconfig.test.json --listFilesOnlylists both edited test files.@objectstack/cli, the tests that read the boot refusal (apply.organization-ownership-refusal.test.ts,organization-ownership.no-organization.integration.test.ts,organization-ownership.declared-rule-mirrors.integration.test.ts), against runtime's rebuiltdist: 3 files and 8 tests passed. The runtimedistcarries the new sentence and has 0 hits of--apply --plan-file PLAN.@objectstack/dogfood,test/organization-ownership-boot-refusal-order.dogfood.test.ts, run once at this head after its closure built (66 tasks, exit 0): 1 file and 5 tests passed.node scripts/pm/dispatch-gates.mjs --commandsnamed 68 commands, and each exit was captured before any pipe. 67 exited 0 on the first pass.pnpm check:dual-build-cjs-loadsfirst answered PREREQUISITE NOT MET (exit 3), because not every package had adist. After the whole-repo build it was re-run and exited 0 (111 require entry points across 69 packages load).--ranreconciliation: "68 derived, 68 run, 0 NOT-MEASURED, 0 UNRUN". At21f7e90f4the new path addspnpm check:platform-checklistandpnpm --filter @objectstack/lint run check:doc-formula-expressions. The derivation named 70 commands, and all 70 exited 0 after the whole-repo build was restored from cache.--ran: "70 derived, 70 run, 0 NOT-MEASURED, 0 UNRUN".check:init-service-contract,check:live-db-isolation,check:meta-type-normalized,check:optional-error-sink,check:resume-authority-declared,check:route-envelope,check:runner-env-posture,check:settings-bind-window,check:startup-registry-verdict,check:verify-stand-in,check:wildcard-fallthrough.pnpm lint(eslint . --no-inline-config) exited 0. At21f7e90f4all 11 andpnpm lintwere re-run and exited 0.node scripts/check-platform-checklist.mjs --changed-from origin/mainexited 0 at both heads: 3 anchors judged, 0 lost. At21f7e90f4,pnpm check:platform-checklistexited 0 ("16 areas, 327 items").@objectstack/plugin-auth'schecklist-refusal-envelope-consistency.test.ts, which reads every area file, passed 1 file and 5 tests. The dogfood file re-run at21f7e90f4passed 1 file and 5 tests.origin/mainhas moved since this branch was cut, but nothing new touches these files, somainwas not merged in.Acceptance notes
packages/runtimeand outside 18.0 release text still sends operators toos 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's rows. The parent's census regex does not match a backtick right after the command name, so it misses two strings.packages/metadata-protocol/src/seed-loader.ts:1739(the seed loader's unowned-holder refusal) says "(os migrate organization-ownership, then the same command with --apply)".packages/metadata-core/src/legacy-organization-row.ts:78(LegacyOrganizationRowsUnreadable) says "Runos migrate organization-ownershipon this database first." Both are reported to the seat to fold into 18.0 release text still sends operators toos 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. They are not changed here.15214-c11-fresh-install-messages.md(docs(tenancy): 18.0 states the three ownership rules and its fresh-install, single-only scope; the operator messages say so too #24506) put the 18.0 sentence ahead of the steps. It is left as it is: it correctly describes its own change, and this PR's changeset describes the removal of the steps.Generated by Claude Code