diff --git a/docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md b/docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md index 01b2c4535c5..4341a84d393 100644 --- a/docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md +++ b/docs/adr/0146-studio-designs-setup-administers-one-editor-per-item-paired-customize-package.md @@ -174,7 +174,8 @@ word is a typing slip for 界面, "one interface" — editorial note, not part o Doors this needs (server cards, Phase 2): the package create door accepts the pairing convention (name `.customize`, dependency on the base, **`namespace` set to the base's explicitly** — the install primitive -otherwise derives one from the id, which for `hotcrm.customize` would be `customize` — idempotent "create if absent"); the flow clone door takes a target +otherwise derives one from the id (`packages/spec/src/kernel/namespace-prefix.ts#deriveNamespaceFromPackageId`), which +for `hotcrm.customize` would be `customize` — idempotent "create if absent"); the flow clone door takes a target `packageId` and refuses a package-less target once the convention exists (fixing the Context §6 mismatch with ADR-0070 D5 on the way). @@ -187,13 +188,15 @@ ADR-0126 §7.4 chose Setup as the first surface for the packaged-flow toggle and (`GET /api/v1/automation/_status`, `POST /api/v1/automation//toggle`) and reads "off for this deployment"; on a **writable package's flow** it stays the definition switch ("disabled; publish to apply"). Two switches, two words — never one control that means different things by package. -- **Authority is the ledger door's, not Studio's.** The toggle's gate (`packages/runtime/src/domains/activation-gate.ts`) +- **Authority is the ledger door's, not Studio's.** The toggle's gate (`packages/runtime/src/domains/activation-gate.ts#refuseUngrantedActivationWrite`) admits `manage_metadata` in the `single` posture and, under the walled `group` / `isolated` postures, only the PLATFORM_ADMIN posture rung (ADR-0126 §5); a tenant administrator there is refused with a sentence naming the platform operator. Studio pre-judges that verdict from the two served facts the console already reads for the walled - catalog doors (`features.tenancyPosture` through `useTenancyPosture`, and `user.isPlatformAdmin` on the session — - `views/metadata-admin/catalog-scope.ts`, `walledCatalogReadOnly`): the switch draws **disabled, in the console's own - words**, for a principal those facts refuse, and the server's refusal is shown verbatim after any attempt, as Setup's + catalog doors (`features.tenancyPosture` through `ui/packages/app-shell/src/hooks/useTenancyPosture.ts#useTenancyPosture`, + and `user.isPlatformAdmin` on the session — + `ui/packages/app-shell/src/views/metadata-admin/catalog-scope.ts#walledCatalogReadOnly` — the posture-and-rung half of + that verdict, without its catalog-type filter, because the ledger gate has no type input): the switch draws + **disabled, in the console's own words**, for a principal those facts refuse, and the server's refusal is shown verbatim after any attempt, as Setup's page shows it today — never a live control that always answers 403, and never a client copy of the gate's sentence. - The item's ⋯ menu offers **Clone** (`POST /api/v1/automation//clone`, a new machine name required, the server's notice shown verbatim with the "switch the original off" offer, objectui#13270's shape); the clone lands in the @@ -233,8 +236,9 @@ Maintainer, verbatim: 「「Edit {app} in Studio」代码包/已安装包一律 Administration reached through Setup's metadata pages today gets a page of its own under Setup before those routes retire: **position holders** (`PositionHoldersSection`) and **permission-set assignment** (`AssignedUsersSection`) are -the two live sections the move re-homes; **queue membership** has no section at this head and arrives as a Setup page -with ADR-0142 D2's landing, never inside a metadata page. Each is a people-and-organization page (the scope of +the two live sections the move re-homes; **queue membership** has no section at this head; its Setup page is a child of +ADR-0142's landing (a row for its console step at that record's acceptance), not of this record's epic — never inside a +metadata page either way. Each is a people-and-organization page (the scope of `setup.access` and the delegated-administrator gate), not a metadata page. ⛔ Phase 3 does not retire a Setup → Metadata route whose administrative action has no Setup home yet. @@ -257,9 +261,9 @@ Setup → Metadata route whose administrative action has no Setup home yet. ## Rollout -Tracked by epic [#28130](https://github.com/objectstack-ai/objectstack/issues/28130) (`pm:epic`, `pm:blocked` on -PR #28045), which carries the phase 2 and phase 3 child-card plan. Cut as cards after this record merges; nothing -below binds a seat before that. Each card cites this record and the epic. +Tracked by epic [#28130](https://github.com/objectstack-ai/objectstack/issues/28130), which carries the phase 2 and +phase 3 child-card plan and was blocked on this record's merge. Cut as cards after this record merges; nothing below binds a +seat before that. Each card cites this record and the epic. 1. **Now** (#27356 row 19, letter **A1**, independent of this record): Studio deletes a writable package's flow from the Automations item menu (confirm; the same `DELETE /meta/:type/:name` door; a pending draft of the item is @@ -271,8 +275,8 @@ below binds a seat before that. Each card cites this record and the epic. (f) the browse entry ([D5](#d5)) — #27356 row 12, PR #28076, merged 2026-10-30; it reversed no wall and landed ahead of this record. 3. **Phase 3 — the catalog moves** ([D1](#d1), [D7](#d7)): `views/metadata-admin` directory, lists, item page, - history and diagnostics re-homed under Studio's All-metadata area (per package and across packages); the three Setup - administration pages; Setup → Metadata routes redirect; QA checklist and e2e door rewrites. + history and diagnostics re-homed under Studio's All-metadata area (per package and across packages); the two Setup + administration pages [D7](#d7) names (queue membership's Setup page is a child of ADR-0142's landing, not of this epic); Setup → Metadata routes redirect; QA checklist and e2e door rewrites. 4. **Phase 4 — as pulled**: app, action, dataset (today a create dialog, no designer), translation, email template, documentation and the AI types gain pillar-grade designers in Studio one card at a time; until then the All-metadata area's generic page is their editor.