Repository navigation
Setup: retire Setup → Metadata behind redirects into Studio (datasource kept) and retire Packaged automation's flows half; Studio stops linking into Setup #28578
Description
epic:#28130#1 · hotlong · session_040dfd80c4c9411b895c698e785a6848
Filing gate: ④ child of epic #28236 (P3, cut 2026-11-01 on the maintainer's 「四项提速措施全部按推荐执行」, schedule reviewed) · plan of record: ADR-0146 Rollout P3 "N-28 Setup → Metadata redirects and Packaged automation retired (D4, D11)"; wait set per schedule review correction 1, plus N-16b. ⛔ Not a claim.
Blocked-by: #28562, #28573, #28567, #28566, #28569, #28561
Part of #28236 (P3, child N-28) · governs: ADR-0146 D1 (Setup carries no metadata editor or catalog), D4 / Q8, D7 ⛔, D11 "Retire" · lane: domain:ui (declared minor surface: the Setup nav entries, their labels, the tombstone and pins in plugin-security, plugin-sharing, platform-objects) · size: L.
Why it waits. Each removed Setup route needs a Studio home first: view, dashboard and report (N-17), translation and email template (N-25), flow "new similar" (N-22), permission-set "new similar" (N-20b: Setup's clone button lives on the catalog page this card retires), counts (N-24, with N-04 done, for Q8), the All metadata area (N-26a). N-16b is not a wait: this card removes the Studio → Setup links itself, and an open package-less write with no form behind it is harmless.
Settled by the record. Datasource stays in Setup (D1). The action ledger switch stays where it is (D4, last bullet), so Packaged automation retires its flows half and the actions section becomes its own Setup entry. A principal with setup.access but no studio.access loses the catalog lists (D1: "Setup carries no metadata catalog"; Consequences: an administrator enters Studio behind manage_metadata); people-and-organization pages stay in Setup (D7, N-27).
Settled by M-1 (#28559, ruling comment 6554738464): A. The on/off switch of positions, permission sets and sharing rules (catalog-activation.ts, today on Setup's catalog item page) moves with the item into Studio, on the item page in #28561's All metadata area, the way D4 moved the flow switch; Setup keeps only the people pages (#28241). D7's ⛔ is met once the switch is reachable in Studio, so the four catalog entries and routes retire with the rest.
Business reason. Two homes for one item is the defect. Once Studio holds every editor, old Setup links and bookmarks must land in Studio, and Setup must not show a metadata catalog.
Measured (35b178bd0a), all in ui/packages/app-shell/src unless named.
- Routes to redirect into N-26a's area, keeping the query and the item:
- the catalog routes under every app segment:
/apps/:app/metadata,/_diagnostics,/:type,/:type/new,/:type/:name,/:type/:name/history(console/AppContent.tsx:1499–1506; no-app branch :1385–1390); - the aliases that chain into them:
component/metadata/directory|resource/*(:1411–1412, :1540–1541) and, inui/apps/console/src/AppContent.tsx,system/metadata*(:257–259),system/objects*(:255–256),system/roles|positions|permissions(:294–296).
- the catalog routes under every app segment:
- Kept in Setup: datasource, which D1 places in Setup. It covers
/apps/setup/metadata/datasource*, the nav entry/apps/setup/component/metadata/resource?type=datasource(packages/services/service-datasource/src/datasource-admin-plugin.ts:671) and Home'ssys-datasources(layout/UnifiedSidebar.tsx:381).metadata/package/*keeps its redirect (:1496). - Setup entries into the catalog:
nav_positions,nav_capabilitiesandnav_permission_sets(packages/plugins/plugin-security/src/security-plugin.ts:1643–1645);nav_declared_sharing_rules(packages/plugins/plugin-sharing/src/sharing-plugin.ts:672);- Home
sys-objects(UnifiedSidebar.tsx:375) and the "Manage Objects" card (console/home/QuickActions.tsx:46).
- Packaged automation:
nav_packaged_automation(platform-objects/src/apps/setup-nav.contributions.ts:63, pinned bysetup-packaged-automation-nav.test.ts), refautomation:packaged(services/builtinComponents.tsx:149–154), exportindex.ts:526. The page mountsPackagedActionsSection(views/setup/PackagedAutomationPage.tsx:749). - Studio links into Setup:
overlayPathon the landing card (views/studio-design/BuilderLanding.tsx:50, :389); the read-only link (StudioDesignSurface.tsx:862–865, N-16b's);packagedAutomationPath→auto-empty-open-setup(BuilderLanding.tsx:61,StudioDesignSurface.tsx:9796); the AI review hop?review=1(console/AppContent.tsx:241). - Shared helpers that must survive:
views/setup/packagedFlows.ts,packagedFlowLedger.ts,packagedActions.ts(imported atFlowLedgerSwitch.tsx:30,StudioDesignSurface.tsx:84–85,catalog-activation.ts:50–51,permission-set-clone.ts:41). - CI live specs drive the catalog route:
ui/e2e/live/studio-object-designer.spec.ts:53/64/78andstudio-editor.spec.ts:56/75(test:e2e:live:ci, run at.github/workflows/ci.yml:4718), plus nightlydeclared-sharing-rules-reach-13091.spec.ts:19.
Wanted.
- Every route above redirects to N-26a's area with
?package,?scopeand?reviewkept, except the datasource routes. The four?scope=environmentcatalog routes redirect too, once the switch is offered on the item page in Studio: an All metadata area in the builder — directory, lists, generic item page, history and diagnostics, per package and across packages; pillar types open their pillar #28561's area (M-1 A). Each alias lands in one hop or at most two. sys-objectsand the "Manage Objects" card leave Home. The four catalog entries leave Setup, andcatalog-activation.ts's switch is offered on the item page in Studio (M-1 A, ruling comment 6554738464, cited in the PR). The door and its gate are unchanged. The release note says an administrator withsetup.accessbut nostudio.accessswitches these items in Studio. Retired translation keys get a tombstone row (setup-nav-dead-key-tombstone.test.ts).- Packaged automation's flows half retires: the nav entry, the ref, the export and the page. The actions section stays as its own Setup entry ("Packaged actions"), because D4 keeps the action switch where it is and no card of this epic moves it.
- Studio stops linking into Setup. The landing's overlay link goes, the
~orgempty state is reworded with no link out, and the review hop goes straight to Studio. - The three CI live specs and the nightly one are re-pointed to the Studio door in this PR.
Tests. A redirect table test over every route and alias above, including datasource staying put. The nav pins are inverted: absent entries, the actions entry present. The tombstone is extended. There are no Studio links into /apps/setup/metadata (a source grep pin). The live allowlist is green.
Release safety. Every editor and every "new similar" has a Studio home (Blocked-by). Whether or not N-16b has landed, nothing links to the retired routes, and a package-less write left open has no form behind it. A principal with setup.access but no studio.access loses the catalog lists (D1); assignments stay on Setup pages (N-27). The release notes say so.
Not here. The area (N-26a), marks (N-26b), QA items and the journey e2e (N-29), the action ledger switch's future home (out of epic, #27842).
Dedupe. Searched setup metadata redirect studio, "packaged automation" retire: only #28236, #28413 and QA runs.
Links back: #28236, #28241, #27842, ADR-0146 D1, D4, D7, D11, Q8, ADR-0126 §7.4.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Unblocked · 2026-11-01T17:18Z ·
pm:blocked→pm:queueBlocked-by: #28562, #28573, #28567, #28566, #28569, #28561is met, every blocker closed completed:d62d9737.da6f0ce3(PR feat(studio): New similar on a read-only base's permission set, opening the copy where the clone door landed it #28669).14049381(PR feat(studio): New similar on a flow in the Automations pillar, opening the copy where the clone door landed it #28668).5e879eab(PR feat(app-shell): each read-only base card on the Studio landing says how many items are customized and switched off #28634).272fec05(PR feat(studio): edit an email template or a translation in the All metadata area, and customize a read-only package's one per locale #28743).3694d3b8.os migratemoves package-less overlay rows into <base>.custom as declared overrides — the migration ceremony only (the close is N-16b) #28413, [Decision] Setup → Metadata retirement: where the on/off switch of positions, permission sets and sharing rules lives — on the item in Studio (A) or kept in Setup (B) #28559, [Epic] Studio designs, Setup administers (ADR-0146): one editor per metadata item, in-place customization on read-only packages, the paired<base>.customizepackage, the metadata catalog moves into Studio #28130) is closed; [Epic] Package-level override: every customization of an installed package lives in its paired <base>.custom package, one declared override shared by code and Studio (supersedes #28130) #28236 is the open epic. No new blocker.domain:ui#4's PR feat(studio): a read-only base and its customization pair as one surface #28747 (Studio: a base and its <base>.custom as one surface — "customized" / "added" marks, "only customizations", the pair folded under its base, New lands in the pair #28572, one surface) editsstudio-design/StudioDesignSurface.tsx, which this card's "Studio stops linking into Setup" also touches. Whoever lands second merges main.domain:ui#1's.Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim: PM loop round 4 · 2026-11-01T17:24Z
Session:
session_01QsR2jRKMRpKnN9FkAvSWGr(card thread, os-dev); dispatched by seat sessionsession_01QsR2jUJ19MstFvFhjgiYTuAccount:
zhuangjianguoBranch:
claude/project-thread-g4z84u(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-28578Domain:
domain:uiSeat:
domain:ui#1File surface: the catalog routes and aliases (
ui/packages/app-shell/src/console/AppContent.tsx,ui/apps/console/src/AppContent.tsx), Home entries (layout/UnifiedSidebar.tsx,console/home/QuickActions.tsx), Packaged automation (views/setup/PackagedAutomationPage.tsx,services/builtinComponents.tsx, theindex.tsexport), Studio links (views/studio-design/BuilderLanding.tsx,StudioDesignSurface.tsx, the All metadata area item page for the activation switch), the Setup nav entries inpackages/plugins/plugin-security,packages/plugins/plugin-sharing,packages/platform-objects, the e2e live specs this card names, their tests, i18n, and a root.changeset(stop on breach; explain in the report)Container & model: L,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: 6561267862
Premise: holds (at
origin/main272fec05:security-plugin.ts:1643-1645andsharing-plugin.ts:672still link/apps/setup/metadata/*?scope=environment;setup-nav.contributions.ts:63still carriesnav_packaged_automation;BuilderLanding.tsx:55overlayPathand :66packagedAutomationPathstill link into Setup; no file underviews/studio-design/importscatalog-activationyet)Serial constraints cleared:
domain:ui#4's PR #28747 (#28572) editsstudio-design/StudioDesignSurface.tsx; whichever lands later mergesmain.ui/packages/app-shellis private, so the removedPackagedAutomationPageexport narrows no published surface.Do the body's Wanted 1-5 and Tests as written; datasource stays in Setup; the activation switch moves per M-1 ruling 6554738464.
Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim amended · 2026-11-01T18:01Z · file surface widened by one file; it adds to claim 6561334639. Branch, session, size and declaration lines are unchanged.
docs/qa/platform-checklist/areas/automation.json, the one entry (~lines 2262-2365) whose source citessetup-nav.contributions.ts#nav_packaged_automation.check-platform-checklist.mjs --changed-from origin/mainreds on that LOST anchor once Wanted 3 removes the entry. The edit is limited to re-pointing that citation to the new#nav_packaged_actionsentry and one sentence saying the flows half retired into Studio (ADR-0146 D11).automation:packagedpage and its tests). QA items belong to N-29 per this card's "Not here"; the dev lists the stale entry in the report and the seat routes it there.Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim amended · 2026-11-01T18:10Z · delivery split into two PRs; it adds to claim 6561334639 and amendment 6561766478. Branch, session, surface and declaration lines are unchanged.
272fec05, over the 3000-line human-merge threshold. The seat splits rather than land on human merge.Part of #28578): Wanted 3. The Packaged automation flows half retires (nav entry,automation:packagedref, export, page and its test), "Packaged actions" becomes its own Setup entry, the nav/i18n/tombstone rows follow, the QA checklist citation is re-pointed (amendment 6561766478). The Studio links that open the retired page (BuilderLanding.tsxpackagedAutomationPath, the~orgempty-state link) and their source grep pin go here too. About 2100 lines, mostly deletions.Fixes #28578): Wanted 1, 2, 4 and 5 with the redirect table, activation-switch and grep tests. About 1950 lines. It opens on the same branch after PR 1 merges.Clause-②: no/Metadata-protocol: noneand its own root changeset.Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Landed (PR 1 of 2) · 2026-11-01T20:27Z · PR #28785 merged through the merge queue as
0aaad18fat 2026-11-01T20:27:05Z (GitHub's clock). ACCEPT 6563184432 at head93d0cab5.0aaad18f~1)origin/main)ui/packages/app-shell/src/views/setup/PackagedAutomationPage.tsxexistsnav_packaged_actionsinplatform-objects/src/apps/setup-nav.contributions.tsPart of #28578: the card stays open andpm:dispatched. PR 2 (Wanted 1, 2, 4, 5: the catalog redirects into Studio, the activation switch on Studio's item page, the review hop, the live specs, plus a redirect for the retired/apps/setup/component/automation/packaged) opens next on the same branch and closes the card. Findings routed: #28579 (QA entry), #28789 (dead i18n keys).Generated by Claude Code
objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jRKMRpKnN9FkAvSWGr
os-dev-report
#28578 — card thread final report
{ "card": 28578, "prs": [ { "pr": 28785, "part": "1 of 2 (Part of #28578)", "head": "93d0cab5", "state": "merged as 0aaad18f", "size": "27 files, +290/-1942" }, { "pr": 28818, "part": "2 of 2 (Fixes #28578)", "head": "50d583ef", "base": "0aaad18f", "state": "draft, checks queued", "size": "48 files, +1562/-730 (2292)" } ], "declaration": { "Clause-②": "no", "Metadata-protocol": "none" }, "surface": "claim 6561334639; amendments 6561766478 (platform checklist citation) and 6561871570 (split)", "wanted": { "1": "every /apps/<app>/metadata route and alias redirects to the All metadata area in one hop, ?package/?scope/?review kept, leg named by the query; datasource stays (SetupMetadataRoute, LegacyMetadataRedirect, console ObjectRedirect/MetadataRedirect/SystemCatalogRedirect via setupMetadataStudioPath)", "2": "sys-objects and Manage Objects leave Home; nav_positions/nav_capabilities/nav_permission_sets/nav_declared_sharing_rules leave Setup with tombstone rows; the Active switch is on the permission/position/sharing_rule item pages (M-1 ruling 6554738464)", "3": "PR 1: nav_packaged_automation -> nav_packaged_actions (automation:packaged-actions), page retired, shared helpers kept", "4": "overlay link removed, ~org empty state reworded with no link, review hop and read-only link open Studio", "5": "studio-object-designer, studio-editor, declared-sharing-rules-reach-13091 aim at Studio", "seat_addition": "component/automation/packaged bookmark -> /studio/<pkg>/automations (query kept); no package -> /studio/~all/metadata/flow" }, "tests": "PR 2 on its rebased head: 332 ui files / 3594 tests green; platform-objects 1497, plugin-security 5126, plugin-sharing 1305 green; app-shell and console type-check green; 66 of 67 dispatch gates exit 0 (teardown-shape --self-test exit 3, shallow clone); PR-body gates green", "deviations": [ "Split into two PRs (the full diff was 4045 lines), on the seat's decision.", "docs/qa/platform-checklist/areas/automation.json citation re-pointed (amendment 6561766478).", "With no ?package, the Packaged automation bookmark lands on the area's cross-package flow list, because the pillar needs a package." ], "out_of_scope_findings": [ { "finding": "automation.json ~2262-2365 still describes the retired page", "reach": "QA entry; routed to N-29 (#28579)" }, { "finding": "20 dead packagedAutomation.* keys in @object-ui/i18n locales, plus the connector-credentials-ui.ts:12 comment", "reach": "filed by the seat as #28789" }, { "finding": "layout.systemNav.objectManager and home.quickActions.manageObjects* keys in @object-ui/i18n are now unused; kept, because removing them narrows (Clause-② yes)", "reach": "ui/packages/i18n locales" } ] }objectstack-fleet commentedon Nov 1, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim amended · 2026-11-01T21:45Z · file surface widened by one line; it adds to claim 6561334639 and amendments 6561766478, 6561871570. Branch, session, size and declaration lines are unchanged.
docs/adr/0126-packaged-metadata-customization-model.md:408, one line. PR feat(setup): Setup's metadata pages open Studio's All metadata area; the catalog's Active switch moves to each item's page #28818 removesnav_permission_sets, which that line anchors (security-plugin.ts#nav_permission_sets), socheck-adr-symbol-anchorsreds. The anchor is re-pointed to the surviving sibling#nav_permission_set_assignmentin the same file, with only that line's words adjusted; no decision text changes.docs/adr/**is a governed surface, so PR feat(setup): Setup's metadata pages open Studio's All metadata area; the catalog's Active switch moves to each item's page #28818 is Tier H and lands on a governed approver's review, under the seat's Tier H record.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim amended · 2026-11-02T00:19Z · after contract review FAIL 6565939840 on PR #28818. This amendment adds to claim 6561334639 and amendments 6561766478, 6561871570 and 6564333789. The branch, session, size and declaration lines are unchanged.
ADR-0126:408 (corrects amendment 6564333789): the line keeps main's words. Only the anchor drops to the file level, with the retired id in plain quotes and one dated note. This is the remedy the review names. It does not re-point the anchor at another symbol.
File surface (added):
ui/packages/i18n/src/locales/*.ts, the value ofconsole.studio.accessRequiredin all ten locales. It now names Setup → Permission Set Assignment. Value only: no key is added or removed.ui/apps/console/src/components/StudioRoute.tsx, that sentence'sdefaultValue.StudioRoute.test.tsxand thestudioAccessGrantor-27521pin, which quote it.packages/plugins/plugin-security/src/security-plugin.ts:1633-1635, a comment. A capability has no switch.The review raised these as should-fix items 1 and 2.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Landed · 2026-11-02T02:01Z · PR #28818 (PR 2 of 2) merged through the merge queue as
67103cc1at 2026-11-02T02:01:09Z (GitHub's clock). It was Tier H: contract review PASS 6566365457 at head31ecbcd3, and seat record 6566344538. The maintaineros-zhuangmarked the PR ready and armed auto-merge by hand, which is the merge record. PR 1 #28785 landed earlier as0aaad18f.67103cc1~1)origin/main)studio-design/setupMetadataRedirect.tsexistsid: 'nav_permission_sets'inplugin-security/src/security-plugin.tsFixes #28578closed this card. In the same stroke as this note,pm:dispatchedcomes off the card andneeds-user-decisioncomes off PR #28818.Generated by Claude Code