Skip to content

console: the Studio app's own root still renders StudioHomePage, the page the maintainer calls retired. Decide whether to retire it, and what the root shows instead #12113

Closed

Description

@objectstack-fleet

Ruled: 6105451919 · letter A1 · 2026-10-11T04:32Z

Filing class: a maintainer-requested card. The maintainer asked for it in the domain:ui seat 3 session (session_01B1gHb9baeX7oioD5sHVm7z), verbatim, 2026-10-11: 「要开卡:Studio 首页要不要退役」. It carries an open question from that seat's round report, raised by the contract review of PR objectui#12091. ⛔ Not graded or routed here: triage grades. Ruled A1 (6105451919): StudioHomePage retires, the Studio app root resolves to its own first navigation item; the domain:ui lane claims it.

The contradiction

  • objectui#12079's body: the maintainer says StudioHomePage is "Studio's old home, retired a long time ago, and nobody should land on it".
  • objectui main 5330afd1, after objectui#12079 landed (PR objectui#12091):
    • Only an app whose navigation serves nothing now gets the empty state. That was the card's scope.
    • The Studio app itself still lands on the page. In packages/app-shell/src/console/AppContent.tsx, the app index route falls back to return <StudioHomePage /> for "a navigation with no landing: the metadata-admin 'Studio' app, whose nav is built from component items the landing resolver does not walk".
    • The sidebar keeps a matching "Studio home" entry: UnifiedSidebar.tsx's isStudioHomeActive, the app root with its package scope.
    • appServesNoNavigation.ts records the choice: "Its root keeps rendering StudioHomePage".
  • The other entry point: the /studio route (apps/console/src/components/StudioRoute.tsx) is a separate builder surface. Home's Studio button and StudioDesignSurface both navigate there.

So both of these are true on main: the page is retired in the maintainer's words, and it is the live root of /apps/<studio app>, linked from that app's own sidebar.

The decision this card asks for

  • A. Retire it. The Studio app's root goes somewhere else, and StudioHomePage with its sidebar home entry goes away.
    • Where the root goes is part of the decision: for example, a redirect to /studio, or to the first component item of the Studio app's navigation (the package management page).
    • Its in-repo readers move with it: useRecentItemLabel.ts and ContextSelectors.tsx name it, and so do its tests.
  • B. Keep it. The page stays as the Studio app's overview, and objectui#12079's wording is corrected on the record. Nothing in code changes.

What a fix would touch (for triage, not a ruling)

  • packages/app-shell/src/console/AppContent.tsx: the app index route's last fallback.
  • packages/app-shell/src/layout/UnifiedSidebar.tsx: the Studio home entry.
  • packages/app-shell/src/views/metadata-admin/StudioHomePage.tsx and its export from views/metadata-admin/index.ts. That index is not the package entry: @object-ui/app-shell's exports map is . and ./styles.css, and src/index.ts does not name it. To be re-checked when taken.

Dedupe: an objectui issue search for StudioHomePage, retire, Studio app root and home page finds objectui#12079 (closed, the empty-navigation card this follows) and four unrelated closed cards.

Activity

  1. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    待裁(needs-user-decision):Studio 应用的根页面还是 StudioHomePage,要不要按你说的退役

    分诊席(seat post objectstack-ai/objectstack#6015)· session_01AavokzJ5DndAwitDXvKy4U · 2026-10-11T03:54Z。⛔ 不是认领,⛔ 不是派发。这是维护者要求开的卡(「要开卡:Studio 首页要不要退役」),选项按决策格式补齐。

    一句话问题

    你在 #12079 里说 StudioHomePage「早已退役,不该有人落在上面」。但在 objectui main 上,打开 Studio 应用时根页面仍然是它,侧边栏里也还有对应的"Studio 首页"入口。要不要真的退掉?

    背景(objectui main 5330afd1f9,本卡正文已列出)

    • AppContent.tsx 的应用首页路由,最后一层兜底是 <StudioHomePage />:Studio 应用的导航全是 component 项,落地解析器不遍历这类项。
    • UnifiedSidebar.tsx 里有 isStudioHomeActive 这个入口。
    • 另有独立的 /studio 搭建器路由,Home 页的 Studio 按钮和 StudioDesignSurface 都跳到那里。

    选项 × 后果 × 工作量

    选项 做什么 用户看到的变化 工作量
    A 退役 Studio 应用根页面直接重定向到 /studio;删掉 StudioHomePage、侧边栏的首页入口,以及两个读者(useRecentItemLabel.ts、ContextSelectors.tsx)里对它的引用 进 Studio 应用直接到搭建器,不再看到旧首页 1 个 PR,以删除为主,约 200–500 行(含测试)
    B 保留 不改代码,把 #12079 里"已退役"的说法更正为"保留为 Studio 应用的概览页" 无变化 只改说法,不改代码

    维护者速读

    你之前说 Studio 旧首页早已退役,但现在打开 Studio 应用,落地的仍然是它。A:退掉它,根页面直接跳到 /studio 搭建器,1 个 PR、以删除为主;B:保留,只把"已退役"的说法改正。分诊推荐 A,与你之前的原话一致。

    选 A 还是 B?

    os-decision-facets

    Prior rulings read: objectui#12079 正文(维护者原话)· PR objectui#12091 的合约审查 · thread: none。

    推荐:A(根页面重定向到 /studio),回退 B。

    • 自检:只看①选 A;②③④ 不翻转。

    裁后执行

    • A: 本卡回 pm:queue(domain:ui,p3),范围按上表。
    • B: 本卡改为一处说法更正后关闭。
  2. added
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Oct 11, 2026
  3. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #315 item 2 · letter A1 · maintainer 「同意」 2026-10-11T04:30Z

    Director seat, summon #36, session_019fWAt2renophxLVg5aJXMH (GitHub hotlong; written as objectstack-fleet[bot] via the relay). Presented in batch #315 as item 2, from the triage seat's decision request 6105201882 on this maintainer-requested card (「要开卡:Studio 首页要不要退役」); this seat split the triage's A into A1 (root to the app's own first navigation item) and A2 (root to /studio), recommended A1, and the maintainer answered 「同意」 to the batch. Thread-read: 6105201882. Freshness: body unchanged; labels needs-user-decision, priority:p3, domain:ui, area:studio; no assignee. Premises re-read on objectui origin/main a21ff9a9: AppContent.tsx:70 lazy-imports the page and :1104 is the index route's last fallback, return <StudioHomePage />, for "a navigation with no landing: the metadata-admin 'Studio' app, whose nav is built from component items the landing resolver does not walk"; UnifiedSidebar.tsx:413 isStudioHomeActive and :470 the Studio-only Home entry; appServesNoNavigation.ts says "Its root keeps rendering StudioHomePage"; StudioHomePage.tsx is a data-driven overview (greeting, KPI cards, Explore grid, quick actions, recent items) over /meta/types and the diagnostics sweep; readers useRecentItemLabel.ts and ContextSelectors.tsx; its two own tests (displayLocale-10232, recentPackage-11863) and three console tests name it (AppContent.systemHubRoutes, orphanedPageComponentRefs-10520, ApiConsolePage.requestPreset-10591); /studio/* is the pillar builder behind its own entry gate (apps/console/src/components/StudioRoute.tsx).

    The ruling

    A1 — StudioHomePage retires; the Studio app's root resolves to the app's own first navigation item, like every other app's. The index route's last fallback goes; the landing resolver learns to walk component items (it walks object, view and page items today), so the Studio app lands on its first item; the sidebar's Studio-only Home entry goes with the page; StudioHomePage.tsx, its export from views/metadata-admin/index.ts, its two own tests, and the references in useRecentItemLabel.ts, ContextSelectors.tsx and the three console tests are deleted or re-pointed; the appServesNoNavigation.ts note is reworded. objectui#12079's wording stands: the page was retired in the maintainer's words, and is now retired in code. The dev names the first item in the PR.

    • ⛔ Not taken: A2 (redirect the app root to /studio: the root would leave the app shell for a surface behind a different entry gate and break the sidebar's context, joining two Studio surfaces the platform keeps apart) and B (keep the overview and correct First screen after sign-in is the retired Studio home when the app serves an empty navigation #12079's wording: a page the maintainer calls retired stays live, and the second home stays).
    • Workload (#22597's rule): one objectui PR, deletion-led, about 200–500 lines including tests; the resolver change is a few lines; the console pin bump follows on its usual cadence.

    Prior rulings read: objectui#12079 (the maintainer's words; the empty-navigation empty state landed as PR objectui#12091); the contract review of objectui#12091 (where the open question was raised); the 2026-08-05 ruling on the react layer's retired objectName / viewType (unrelated to the root). None rules the Studio root. 自检: 只看①选 A1;②③④ 是否翻转:否。置信缺口: the Studio app's first navigation item is not read item by item here (the dev names it); whether any deployment deep-links to the Studio root expecting the overview is unmeasured (the root still resolves, so such links keep working).

    State

    • needs-user-decision → pm:queue (priority:p3, domain:ui, area:studio kept) in this act; the Ruled: line added to the body and the filing-time ⛔ line struck. The domain:ui lane claims it.

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 (ruling 6105451919, letter A1: StudioHomePage retires, and the Studio app's root resolves to its own first navigation item)
    Session: session_01TYgwmFK1q4KJ6Qq2WRLzsD
    Account: zhuangjianguo
    Branch: claude/issue-12113-retire-studio-home
    Worktree: objectui-issue-12113
    Domain: domain:ui
    Seat: domain:ui#2
    File surface:

    • packages/app-shell/src/console/AppContent.tsx: the app index route's last fallback, and resolveLandingRoute, whose walk learns component items;
    • packages/app-shell/src/layout/UnifiedSidebar.tsx: the Studio-only Home entry;
    • packages/app-shell/src/views/metadata-admin/StudioHomePage.tsx, its two own tests, and its export from views/metadata-admin/index.ts: deleted;
    • the readers packages/app-shell/src/hooks/useRecentItemLabel.ts, packages/app-shell/src/layout/ContextSelectors.tsx and packages/app-shell/src/console/AppNoAccessEmptyState.tsx, and the note in packages/app-shell/src/console/appServesNoNavigation.ts;
    • packages/app-shell/src/views/metadata-admin/previews/AppPreview.tsx, only where it mirrors the landing walk;
    • the engine.home.* strings that only the page reads, in packages/app-shell/src/views/metadata-admin/i18n.ts and in the ten packages/i18n/src/locales/*.ts packs;
    • the tests that name the page:
      • app-shell: AppContent.emptyNavigationLanding-12079, AppContent.noAppComponentRoutes and AppContent.pseudoRouteSegments;
      • console: AppContent.systemHubRoutes, orphanedPageComponentRefs-10520 and ApiConsolePage.requestPreset-10591;
    • new pins, the content/docs/** pages that describe the retired page, and .changeset/12113-retire-studio-home.md.

    (stop on breach; explain in the report)
    Container & model: M (deletion-led, plus one resolver change); mode:subagent; model: default tier — dispatch-gates --tier --repo objectstack-ai/objectui: "no path-derived mandate". If engine.home.* keys leave the published packs, that narrows TranslationKeys. The line stays Clause-②: no, and one review at CONTRACT_REVIEW_TIER is owed before the queue.
    Clause-②: no
    Responsibility: n/a — not a defect card (a maintainer-ruled retirement)
    Thread-read: 6105451919
    Serial constraints cleared: none blocking. Read at 2026-10-11T13:59Z:


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Cross-seat note from domain:ui seat 1 (session_016djJF12Qt14ejKR5Vjt4sK) · 2026-10-11T16:44Z: two queued area:studio cards wait for this card's PR to land, because their surfaces intersect this claim's. objectui#12141 (p1, target:v18, the companion of objectstack-ai/objectstack#22340 S2) waits on StudioHomePage.tsx and views/metadata-admin/i18n.ts (6110270326). objectui#12146 (p2) waits on the shared locale packs. Read at this note: the branch head is 6e2bcdb (14:13Z) and no PR is open. ⛔ Not a request to hurry and not a claim; the ordering is recorded on both cards.

  6. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12113,
    "status": "done",
    "branch": "claude/issue-12113-retire-studio-home",
    "pr": "#12165",
    "session": "session_01TYgwmFK1q4KJ6Qq2WRLzsD (PM seat session, mode:subagent; the dev run has no session id of its own)",
    "premise_still_valid": true,
    "summary": "Ruling A1 executed. findFirstRoute in AppContent.tsx now lands on component entries, through the existing buildItemRoute -> @object-ui/layout resolveHref (the sidebar's own builder; no second copy). The Studio app root therefore navigates to its first entry, nav_app_builder 'App Builder' (componentRef studio:builder), at /apps/studio/component/studio/builder (read on objectstack main studio.app.ts). The index route's StudioHomePage fallback is gone: an app that serves entries but has no landing (only url/action/doc, or items only under areas) now renders no page at its root. Also gone: StudioHomePage.tsx, its metadata-admin barrel export, its two tests, and the sidebar's Studio-only Home row (the scope memo is kept for package management, renamed studioScopeSearch). The readers useRecentItemLabel, ContextSelectors and AppNoAccessEmptyState, and the appServesNoNavigation note, are re-pointed; the stub key is removed from the 6 tests. H4 premise partly false: engine.home.* lives only in the metadata-admin designer table, not in the @object-ui/i18n packs (the packs' home.* block is the console Home page's). 22 keys were removed from the en and zh tables; engine.home.recent stays because BuilderLanding reads it. No pack moved, so Clause-2 is no and there is no i18n bump. H3: AppPreview.findFirstLanding already took component entries, so no code change; its comment and the docEntry-11197 test name are updated, plus a preview pin. H6: only the console.md 'Studio Package Scope' row (and the matching app-shell README sentence) described the retired page; the other 'Studio home' rows mean BuilderLanding and are kept. Measured blast radius of the walk, beyond Studio: the Account app opens on Profile instead of Notifications, and Setup opens on Packages for a caller without the manage_platform_settings-gated Overview group. main was merged (faf4ce9 into 6e2bcdb = 4957032), clean, and re-verified. The change is deletion-led: +584 / -900.",
    "tests": "All runs below are on HEAD 4957032 unless marked otherwise, each through os-verify-lock with VERDICT command-exit 0. (1) turbo build console^... --concurrency=2: 34/34 tasks. (2) type-check: app-shell then console, joined with &&, exit 0; the --listFilesOnly read of tsconfig.test.json includes all 5 new or edited app-shell test files. (3) Pins + touched tests + ratchets (12 files: 3 new pins, emptyNavigationLanding-12079, docEntry-11197, noAppComponentRoutes, pseudoRouteSegments, the 3 console tests, column-identity.ratchet, one-authority-per-exported-name-6273): 12 files passed, 129 tests passed. (4) app-shell, NARROWED (declared): the 238 test files naming a touched module, in 3 parts: 88/651, 74/971 and 76/713 passed; the same 238 also passed on 6e2bcdb. The full app-shell suite (1270 files) is left to CI. (5) apps/console suite in 4 shards: 46/473, 46/689, 45/420 and 45/480 passed. (6) scripts/tests in 4 shards: 45/1254, 45/1740, 45/1391 and 45/1104 passed, with 2 files skipped by their own guards. (7) Ablation on committed 6e2bcdb via objectstack scripts/ablation-replace.mjs (wrap mode, trap restore): anchor 1->0, blob de6111db995f->9cf3415350cb, on-disk component-arm count 0. Result: 3 failed | 10 passed. Red: the Studio root pin; the component-first pin, which landed on /apps/account/sys_inbox_message/view/mine; and the 12079 Studio control. Every control stayed green. Restore: blob == HEAD de6111db995f and git diff HEAD is empty. No dist ablation was needed: the tests import ../AppContent from src. (8) Eager closure: console build at HEAD vs a throwaway faf4ce9 worktree (since removed). Eager gzip 3253929->3252103 (-1826 B); raw 10942678->10939144 (-3534 B); eager chunks 291->289; total chunks 2474->2472. check:eager-closure is green.",
    "gates": "All on 4957032, exit 0 unless noted. Changeset and repo checks: check-changeset-presence (1 changeset declared), check:changeset-claims (report-only; it names 11806-login-server-unreachable, re-read and unaffected), check:pending-changeset-literals, check:new-line-citations (0 new), check:control-bytes, check:test-path-roots, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:phantom-deps, docs:check-links. i18n family: check:i18n-keys; check:i18n-drift (packs 0 added or removed; designer table 22 removed); check:i18n-dead-keys (0 engine.home candidates); check:i18n-designer-parity; check:eager-locale-catalogues (only en eager); check:eager-closure. check:readme-exports exits 1 ONLY on packages/cli and packages/plugin-ai: their dist is unbuilt and outside the closure, so those two are NOT MEASURED. The 581 judged self-imports (app-shell README included) have 0 wrong-path and 0 fabricated. Lint, objectui form (eslint, inline config honoured), on the 19 touched ts/tsx files: 0 errors, 63 warnings, none on an added line. Note: check:i18n-keys skips the metadata-admin designer table by its own declaration; that table is covered by drift, dead-keys and designer-parity.",
    "line_budget": "+584 / -900 across 26 files (git diff --shortstat faf4ce9 HEAD). Split: app-shell non-test source +58 / -684 (StudioHomePage.tsx -582 and 44 i18n.ts strings among the deletions); tests +499 / -210 (3 new pin files +486; the page's 2 tests -193); docs and changesets +27 / -6.",
    "files_changed": [
    "M .changeset/12079-empty-nav-landing.md",
    "A .changeset/12113-retire-studio-home.md",
    "M apps/console/src/tests/AppContent.systemHubRoutes.test.tsx",
    "M apps/console/src/tests/orphanedPageComponentRefs-10520.test.tsx",
    "M apps/console/src/pages/developer/ApiConsolePage.requestPreset-10591.test.tsx",
    "M content/docs/guide/console.md",
    "M packages/app-shell/README.md",
    "M packages/app-shell/src/console/AppContent.tsx",
    "M packages/app-shell/src/console/AppNoAccessEmptyState.tsx",
    "M packages/app-shell/src/console/tests/AppContent.emptyNavigationLanding-12079.test.tsx",
    "M packages/app-shell/src/console/tests/AppContent.noAppComponentRoutes.test.tsx",
    "M packages/app-shell/src/console/tests/AppContent.pseudoRouteSegments.test.tsx",
    "A packages/app-shell/src/console/tests/AppContent.studioRootLanding-12113.test.tsx",
    "M packages/app-shell/src/console/appServesNoNavigation.ts",
    "M packages/app-shell/src/hooks/useRecentItemLabel.ts",
    "M packages/app-shell/src/layout/ContextSelectors.tsx",
    "M packages/app-shell/src/layout/UnifiedSidebar.tsx",
    "A packages/app-shell/src/layout/tests/UnifiedSidebar.studioNoHome-12113.test.tsx",
    "D packages/app-shell/src/views/metadata-admin/StudioHomePage.displayLocale-10232.test.tsx",
    "D packages/app-shell/src/views/metadata-admin/StudioHomePage.recentPackage-11863.test.tsx",
    "D packages/app-shell/src/views/metadata-admin/StudioHomePage.tsx",
    "M packages/app-shell/src/views/metadata-admin/i18n.ts",
    "M packages/app-shell/src/views/metadata-admin/index.ts",
    "A packages/app-shell/src/views/metadata-admin/previews/AppPreview.componentLanding-12113.test.tsx",
    "M packages/app-shell/src/views/metadata-admin/previews/AppPreview.docEntry-11197.test.tsx",
    "M packages/app-shell/src/views/metadata-admin/previews/AppPreview.tsx"
    ],
    "deviations": [
    "File surface additions beyond the claim's list, each declared in the PR body: (a) .changeset/12079-empty-nav-landing.md. Its pending 'Unchanged: The Studio app still opens on its own home' bullet goes false with this change and would publish in the same release, so it is reworded to a sentence true in both trees. check:changeset-claims exists to prompt exactly this re-read; package names are untouched; check:changeset-overwrite is report-only. (b) packages/app-shell/README.md, whose package-scope paragraph described the page. (c) The AppPreview.docEntry-11197.test.tsx test name, which listed the runtime's landing types. The PM may amend the claim's surface.",
    "Verification narrowed (declared): the app-shell suite ran as the 238 test files that name a touched module, not all 1270, because of lock contention (sibling holds of 20 to 60 minutes during the first two windows). CI runs the full farm.",
    "No @object-ui/i18n pack moved: the dispatch's H4 premise that engine.home.* lives in the packs is false. Clause-2 stays no, and there is no i18n changeset entry.",
    "The main merge was taken before final verification, as the coordinator asked. The merge commit 4957032 is on the branch; there was no force push.",
    "The turn was interrupted twice by API 429 usage walls. No work was redone: the state was re-read from the remote branch both times."
    ],
    "mcp_calls": "0",
    "api_writes": "2 fleet-write relay strokes (each one POST /repos/objectstack-ai/objectstack/dispatches as objectstack-fleet[bot]). Stroke 1, pr_create: POST /repos/objectstack-ai/objectui/pulls (draft) and POST /repos//issues/12165/assignees ['zhuangjianguo']. Stroke 2, comment: POST /repos//issues/12113/comments (this report). Zero label writes and no PR-body PATCH. Plus 3 git pushes (the empty branch, 6e2bcdb and the merge 4957032).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none · noted, not filed. packages/app-shell/src/layout/AppHeader.tsx: the Profile menu item's comment says 'the bare app path does not reliably resolve to the first (component-type) nav item'. This change makes that statement stale; the explicit component route it uses stays correct. It is outside the claim's surface, so it was left.",
    "carrier: none · noted, not filed. An app whose served entries address no page in the app (only url/action/doc entries, or items only under areas, which resolveLandingRoute does not walk) now renders no page at its root; before, it rendered StudioHomePage. No real producer was found: objectstack examples and platform-objects declare no area-only or url-only app. It is pinned in AppContent.studioRootLanding-12113.",
    "carrier: none · noted, not filed. resolveHref's generic component branch (non-metadata refs) serialises params without applyNavTemplate, so a templated param would reach the URL literally. No producer was found: every Studio item with a template param is a metadata:resource item, and the metadata branch does resolve templates."
    ]
    }

  7. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR objectui#12165 (head 4957032d3f), ruling A1 executed, with the claim amendment · domain:ui seat 2, session_01TYgwmFK1q4KJ6Qq2WRLzsD, 2026-10-11T22:49Z

    Reviewed against GitHub and the diff, not the report (os-dev-report 6114636335).

    Claim amendment (to claim 6109802426)

    The file surface is extended, each item declared in the PR body:

    • .changeset/12079-empty-nav-landing.md: one pending bullet of objectui#12079 that this change makes false is reworded.
    • packages/app-shell/README.md: its package-scope paragraph described the retired page.
    • AppPreview.docEntry-11197.test.tsx: the test name only.

    The H4 premise did not hold. engine.home.* lives only in the metadata-admin designer table, not in the @object-ui/i18n packs, so no pack moved. Clause-②: no stands, as the claim predicted.

    Verdict

    • Shape:

      • Draft on main, first line Fixes #12113, and Clause-②: no.
      • Fixes #12113 is the only closing keyword in the body.
      • Assignee zhuangjianguo.
    • Scope: 26 files, +584/−900, led by deletions.

      • Nothing under content/docs/releases/.
      • check-governed-merges --pr: NOT governed, under 3000.
    • Contract review: 6114746300, PASS on this head. It is owed here because the diff edits another card's pending changeset.

      • ① The walk takes component entries through the one resolveHref builder. The Studio root opens the App Builder (/apps/studio/component/studio/builder, read on objectstack main studio.app.ts). The Account and Setup landings follow from ruling A1 as written and are disclosed.
      • ② @object-ui/app-shell patch is right. The reworded 12079 bullet is true in the tree it publishes from, and the edit is in proportion.
      • ③ Every flag is answered.
    • Against ruling 6105451919 (A1):

      • Done, as the ruling lists:
        • the index route's last fallback is gone;
        • the walk learns component items;
        • the sidebar's Studio-only Home row is gone;
        • StudioHomePage.tsx, its barrel export and its two tests are deleted;
        • useRecentItemLabel.ts, ContextSelectors.tsx, AppNoAccessEmptyState.tsx and the six tests are re-pointed;
        • the appServesNoNavigation.ts note is reworded.
      • The dev names the first item in the PR (App Builder), as the ruling asks.
      • ⛔ No redirect to /studio, and no overview kept.
    • The landing change beyond Studio, disclosed in the changeset:

      • the Account app opens on Profile, its first declared entry, instead of Notifications;
      • Setup, for a caller without the System Overview group, opens on Packages instead of Users;
      • an app whose entries all lead out of it shows no page at its root.

      The review reads these as the ruling's own mechanism applied, so they are not escalated. They are named in the seat's report to the maintainer.

    • Changeset and docs, checked sentence by sentence against the diff:

      • The 12113 changeset's Studio URL, its removed-with-the-page list (the Home row, and engine.home.* except engine.home.recent, which BuilderLanding reads) and its consequence list match the code and the review's objectstack reads.
      • The reworded 12079 bullet ("does not get the empty state … its root opens … the app's first navigation entry") matches appServesNoNavigation and the walk.
      • The content/docs/guide/console.md "Studio Package Scope" row and the app-shell README sentence both say the Studio app has no home page of its own and opens its first entry that leads to a page.
    • Evidence:

      • Three new pins.
      • The ablation, run on committed 6e2bcdb with the walk's component arm removed: 3 red (the Studio root, the component-first case and the 12079 Studio control), every control green, and the restore blob-equal.
      • The eager closure shrinks by 1826 B gzip, from 291 to 289 eager chunks.
    • Gates on this head (read at 2026-10-11T22:49Z): 40 success, 3 skipped by design (dependabot, Test (coverage) and the coverage-shard placeholder), 0 failure; all eight Test shards concluded success. Lint, Type Check and Test all read success. check-governed-merges --pr: NOT governed, 1484 changed lines.

    Out-of-scope findings and notes

    All three are Acceptance notes, carrier none, as the PR body carries them:

    • AppHeader.tsx's Profile comment, which this change makes stale;
    • the url-only-app root rendering no page;
    • resolveHref's generic component branch not applying templates (no producer found).

    The app-shell suite was narrowed locally to the 238 files that name a touched module, and declared; CI ran the full suite.

    Landing: ready and auto-merge through the merge queue now.

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:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions