Skip to content

Setup: retire Setup → Metadata behind redirects into Studio (datasource kept) and retire Packaged automation's flows half; Studio stops linking into Setup #28578

Closed

Description

@objectstack-fleet

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, in ui/apps/console/src/AppContent.tsx, system/metadata* (:257–259), system/objects* (:255–256), system/roles|positions|permissions (:294–296).
  • 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's sys-datasources (layout/UnifiedSidebar.tsx:381). metadata/package/* keeps its redirect (:1496).
  • Setup entries into the catalog:
    • nav_positions, nav_capabilities and nav_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 by setup-packaged-automation-nav.test.ts), ref automation:packaged (services/builtinComponents.tsx:149–154), export index.ts:526. The page mounts PackagedActionsSection (views/setup/PackagedAutomationPage.tsx:749).
  • Studio links into Setup: overlayPath on 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 at FlowLedgerSwitch.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/78 and studio-editor.spec.ts:56/75 (test:e2e:live:ci, run at .github/workflows/ci.yml:4718), plus nightly declared-sharing-rules-reach-13091.spec.ts:19.

Wanted.

  1. Every route above redirects to N-26a's area with ?package, ?scope and ?review kept, except the datasource routes. The four ?scope=environment catalog 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.
  2. sys-objects and the "Manage Objects" card leave Home. The four catalog entries leave Setup, and catalog-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 with setup.access but no studio.access switches these items in Studio. Retired translation keys get a tombstone row (setup-nav-dead-key-tombstone.test.ts).
  3. 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.
  4. Studio stops linking into Setup. The landing's overlay link goes, the ~org empty state is reworded with no link out, and the review hop goes straight to Studio.
  5. 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

  1. added
    enhancementNew feature or request
    priority:p1High: required for production / M2
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Unblocked · 2026-11-01T17:18Z · pm:blocked → pm:queue


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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 session session_01QsR2jUJ19MstFvFhjgiYTu
    Account: zhuangjianguo
    Branch: claude/project-thread-g4z84u (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-28578
    Domain: domain:ui
    Seat: domain:ui#1
    File 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, the index.ts export), Studio links (views/studio-design/BuilderLanding.tsx, StudioDesignSurface.tsx, the All metadata area item page for the activation switch), the Setup nav entries in packages/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: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6561267862
    Premise: holds (at origin/main 272fec05: security-plugin.ts:1643-1645 and sharing-plugin.ts:672 still link /apps/setup/metadata/*?scope=environment; setup-nav.contributions.ts:63 still carries nav_packaged_automation; BuilderLanding.tsx:55 overlayPath and :66 packagedAutomationPath still link into Setup; no file under views/studio-design/ imports catalog-activation yet)
    Serial constraints cleared: domain:ui#4's PR #28747 (#28572) edits studio-design/StudioDesignSurface.tsx; whichever lands later merges main. ui/packages/app-shell is private, so the removed PackagedAutomationPage export 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

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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.

    • File surface (added): docs/qa/platform-checklist/areas/automation.json, the one entry (~lines 2262-2365) whose source cites setup-nav.contributions.ts#nav_packaged_automation. check-platform-checklist.mjs --changed-from origin/main reds on that LOST anchor once Wanted 3 removes the entry. The edit is limited to re-pointing that citation to the new #nav_packaged_actions entry and one sentence saying the flows half retired into Studio (ADR-0146 D11).
    • Not here: rewriting the rest of that QA entry (it still describes the retired automation:packaged page 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

  5. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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.

    • Why: the whole change measures 51 files, +1591 / −2454 (4045 lines) against 272fec05, over the 3000-line human-merge threshold. The seat splits rather than land on human merge.
    • PR 1 (Part of #28578): Wanted 3. The Packaged automation flows half retires (nav entry, automation:packaged ref, 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.tsx packagedAutomationPath, the ~org empty-state link) and their source grep pin go here too. About 2100 lines, mostly deletions.
    • PR 2 (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.
    • Each PR carries Clause-②: no / Metadata-protocol: none and its own root changeset.

    Generated by Claude Code

  6. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Landed (PR 1 of 2) · 2026-11-01T20:27Z · PR #28785 merged through the merge queue as 0aaad18f at 2026-11-01T20:27:05Z (GitHub's clock). ACCEPT 6563184432 at head 93d0cab5.

    probe before (0aaad18f~1) now (origin/main)
    ui/packages/app-shell/src/views/setup/PackagedAutomationPage.tsx exists yes no
    nav_packaged_actions in platform-objects/src/apps/setup-nav.contributions.ts 0 1

    Part of #28578: the card stays open and pm: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

  7. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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" }
      ]
    }
  8. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    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.


    Generated by Claude Code

  9. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    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 of console.studio.accessRequired in 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's defaultValue.
      • StudioRoute.test.tsx and the studioAccessGrantor-27521 pin, 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

  10. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

    Landed · 2026-11-02T02:01Z · PR #28818 (PR 2 of 2) merged through the merge queue as 67103cc1 at 2026-11-02T02:01:09Z (GitHub's clock). It was Tier H: contract review PASS 6566365457 at head 31ecbcd3, and seat record 6566344538. The maintainer os-zhuang marked the PR ready and armed auto-merge by hand, which is the merge record. PR 1 #28785 landed earlier as 0aaad18f.

    probe before (67103cc1~1) now (origin/main)
    studio-design/setupMetadataRedirect.ts exists no yes
    id: 'nav_permission_sets' in plugin-security/src/security-plugin.ts 1 0

    Fixes #28578 closed this card. In the same stroke as this note, pm:dispatched comes off the card and needs-user-decision comes off PR #28818.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uienhancementNew feature or requestpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions