Skip to content

[Epic] Studio designs, Setup administers (ADR-0146): one editor per metadata item, in-place customization on read-only packages, the paired <base>.customize package, the metadata catalog moves into Studio #28130

Closed as not planned
1 of 1 issue completed

Description

@objectstack-fleet

director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH

Epic: ADR-0146 rollout · pm:epic · opened by the project decision thread 「决定 Studio 建议三行的产品取舍」 on the maintainer's word 「同意,立专题卡」 (2026-10-30T13:22Z), after 「按照这个方案先更新 issue,写adr。等我审核」 (10:28Z). The record is ADR-0146 (Proposed), draft PR #28045 — the maintainer's hand-merge is its acceptance (Prime Directive #14). ⛔ Not a claim.

Blocked-by: PR #28045. ⛔ Until ADR-0146 merges, no seat claims this epic and no child card is cut from it; the phase lists below are the plan of record, not cards. The row rulings already executing on #27356 (row 12 → PR #28076, merged; row 19 A1 Delete flow, seat domain:ui#3) stay on #27356 and are not children of this epic.

Territory (declared): ui/packages/app-shell/src/views/studio-design/** (pillars, rails, switcher, landing), ui/packages/app-shell/src/views/metadata-admin/** (the catalog that moves), ui/packages/app-shell/src/views/setup/** (Packaged automation page; the new administration pages), ui/packages/app-shell/src/hooks/useStudioDesignGate.ts, packages/runtime/src/flow-clone.ts and packages/runtime/src/domains/{automation,packages}.ts (the clone door's target package; the paired-package create convention), packages/metadata-protocol/src/protocol-package-install.ts (explicit namespace on the paired create), docs/qa/platform-checklist/areas/{studio-authoring,ux-conventions}.json, ui/e2e/live/studio-object-designer.spec.ts. Server children go to the domain:server queue; the rest are domain:ui.

维护者速读

Phase 2 — customization on the read-only package (6 children; cut after #28045 merges)

# Child (one card each) Lane ADR Depends on
2a In-place overlay editing on a read-only package's overlay-type item (views, dashboards, reports first; translations and email templates after): draft writes the overlay row, publish applies; "customized in this environment" chip from the layered read; Reset to package default (the existing DELETE /meta/:type/:name, honest verb from resettable); retire the row-13 link to Setup domain:ui D2 —
2b Activation-ledger switch and Clone on a read-only package's flow in the Automations pillar: switch bound to GET /automation/_status + POST /automation/<name>/toggle, worded "off for this deployment", distinct from the writable package's definition switch; disabled from the served posture facts (features.tenancyPosture, user.isPlatformAdmin) with the console's wording, server refusal shown verbatim after an attempt; Clone via POST /automation/<name>/clone with the server notice and the "switch the original off" offer (objectui#13270) domain:ui D4 2c for the clone's landing
2c Flow clone door takes a target packageId (a writable package) and refuses a package-less target once 2d exists; closes the ADR-0070 D5 gap (clones no longer land in the retired scope) domain:server D3 —
2d Paired-package create convention: POST /packages (and the install primitive) accept <base>.customize — dependency on the base in manifest.dependencies (ADR-0141), namespace set to the base's explicitly (the id-derived default would be customize), idempotent create-if-absent; one packages/spec constant for the pairing that the door and the console both read domain:server (+ domain:spec for the constant) D3 —
2e Studio shows base + <base>.customize as one surface: mixed rails with a "customization" chip and an "only customizations" filter; New / Clone land in the paired package without a prompt; pending-changes and publish act on the paired package; the switcher folds the paired package under its base; contributed items from other packages greyed with their source domain:ui D3 2d
2f Studio landing: one line per package — overlaid count and switched-off count (served rows and ledger rows; nothing computed) domain:ui D3 2a, 2b

Phase 3 — the catalog moves (4 children; cut after Phase 2 lands)

# Child Lane ADR
3a Re-home views/metadata-admin directory, lists, generic item page (schema form, Source JSON, layered diff, history, diagnostics, reset/delete) under Studio's All metadata area, per package and across packages; a pillar type opened from the directory opens its pillar domain:ui D1
3b Setup administration pages: position holders (from PositionHoldersSection) and permission-set assignment (from AssignedUsersSection) as people-and-organization pages under setup.access; queue membership arrives with ADR-0142 D2, not here domain:ui D7
3c Setup → Metadata routes redirect into Studio; the Setup item pages for the seven pillar types stop editing; Packaged automation stays as the deployment-wide operations overview until the maintainer decides its retirement (ADR-0146 open question 1) domain:ui D1, D4
3d QA checklist and e2e: items driving the Setup designer as "a sibling door onto the same save" (studio-authoring.json, ux-conventions.json, studio-object-designer.spec.ts) rewritten to the Studio door or marked transitional domain:ui (docs/qa) Consequences

⛔ 3c does not retire a route whose administrative action has no Setup home yet (3b first).

Phase 4 — as pulled (direction only, no cards here)

App, action, dataset (today a create dialog, no designer), translation, email template, documentation and the AI types gain pillar-grade designers one card at a time; until then the All-metadata area's generic page is their editor.

Not in this epic

Dedupe

Open domain:ui / area:studio titles read for "Setup designer", "one designer", "customize package", "overlay in Studio", "Open in Studio": none covers this plan. Related, not duplicates: #27356 (the source rows), #27928 (row 20 nav-contributor stamp, server), #26889 (contributed interfaces listing), #27842 / #27504 (switched-off packaged action), #12049 (ADR-0126's charter card).

Links back: ADR-0146 (PR #28045), #27356, ADR-0126 §7.4 / §9, ADR-0070 D3 / D5, ADR-0141, ADR-0142.
Size: XL across phases; each child S–M.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-bill · session_01Utp6CaRN6wdrRyLKJSCMYH

    Status — 2026-10-30T14:04Z.

    ADR-0146 merged: PR #28045 landed on main as cdbf08d1 (2026-10-30T13:55Z, merge queue). The Blocked-by in the body is satisfied; the ⛔ on cutting children is lifted. The last contract review's three wording should-fixes ride in follow-up PR #28145 (docs-only, Tier H hand-merge); they change no decision.

    Phase 2 children cut (each pm:queue, priority:p2, waiting for its lane — ⛔ not claims):

    # Child Card Lane
    2a In-place overlay editing + chip + Reset on a read-only package #28147 domain:ui
    2b Ledger switch + Clone on the read-only package's flow, posture-aware #28148 domain:ui
    2c Flow clone door takes a target packageId #28149 domain:server

    Held: 2d (paired-package create convention) waits on the maintainer's answer to ADR-0146 open question 2 — a packages/spec constant for the pairing (this epic's row, recommended) or a server-side default applied by the create door; 2e and 2f depend on 2d / 2a+2b and are cut right after. Phase 3 is cut after phase 2 lands, as the body says.

    pm:blocked comes off this epic now that its named blocker merged; the held children are named here, not by a label.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848

    Closed 2026-10-30T18:41Z as not planned — superseded by epic #28236 (package-level override).

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

    area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uienhancementNew feature or requestpm:epicpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions