Repository navigation
feat(app-shell): Studio home returns to the Studio landing; the two Setup exits say so - #12590
Conversation
…etup exits say so The shell header's first button and a new first row in the package switcher both lead to `/studio` (the Studio landing), behind the same unsaved-edits gate. The installed card's Setup link reads "Open in Setup" with an outward arrow, and the empty Organization flows block links to Setup › Packaged automation (`/apps/setup/component/automation/packaged`, built from the `automation:packaged` component ref). Claude-Session: https://claude.ai/code/session_01Li9iYX6uAhVZJgyCfJ1Maz Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
席位核对 — ACCEPT · objectui#12513 · head
|
…udio-home-loop # Conflicts: # packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx
…r the Studio home change Claude-Session: https://claude.ai/code/session_01Li9iYX6uAhVZJgyCfJ1Maz Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
席位核对 — follow-up ACCEPT · objectui#12513 · head
|
Landing · head
|
Fixes #12513
Clause-②: no
What changed
Target 1: the header's first button returns to the Studio landing. In the shell header of
StudioDesignSurface.tsx, the first button now navigates to/studio(theBuilderLandingpage) instead of the deployment's home path. It keeps theconfirmLeavePillar()gate. It is titled "Studio home" (new keyengine.studio.landingHome) and carries the new testidstudio-home. The console home is one click further, through the landing's own top bar.StudioRoute.tsxneeded no change:/studioalready renders the landing.Target 2: the package switcher's first row is "Studio home".
PackageSwitchergets a new first row (testidstudio-switcher-home) above the package list. It is gated bybeforeNavigatelike the other rows. The deleted-package eviction is unchanged.Target 3: the two Setup exits say so.
studio-landing-overlay, unchanged) reads "Open in Setup" with an outward arrow (ArrowUpRight). I reworded the en and zh values of the existing keyengine.studio.landing.overlay. Its route and its overlay tooltip (engine.studio.landing.overlayTitle) are unchanged.StudioEmptyState,auto-empty) gets an "Open in Setup" link as itsaction(new keyengine.studio.org.openSetup, new testidauto-empty-open-setup). It is a link, not a create button, since this scope creates nothing. A package's own empty block is unchanged.nav_packaged_automation(objectstackpackages/platform-objects/src/apps/setup-nav.contributions.ts) names the component refautomation:packaged. app-shell registers that ref inbuiltinComponents, and the console serves it at/apps/setup/component/automation/packaged. The link builds that URL from the ref withcomponentRefToUrlSegments, the same helperPackagedAutomationPage.navContribution.test.tsxpins. In the live console, following it opens the Setup page headed "Packaged automation".Retired key.
engine.studio.home("Back to home" / "返回主页") is removed from the en and zh designer tables. After the header change nothing reads it, andcheck:i18n-dead-keysno longer lists it.No change to Setup. No existing testid was removed, and every i18n key that has a reader stays. New keys are in en and zh, the two halves of the designer table.
Deviations
StudioDesignSurface.pillarNavGuard.test.tsx: its Home-button case clicked "Back to home" and expected/home. Target 1 changes both, so it now clicks "Studio home" and expects the/studiolanding. The cancel and confirm gate assertions are unchanged.Screenshots (evidence branch
claude/issue-12513-evidence, never merged)Console at 1280 px against HotCRM
63db83eunderobjectstack dev --fresh.Test evidence
On HEAD
c94f216(origin/mainae923ecmerged in, plus the key retirement):StudioDesignSurface.homeLoop-12513,BuilderLanding.setupExit-12513,StudioDesignSurface.pillarNavGuardandStudioItemHeader.statusPlace-12524: 4 files, 17 tests passed, exit 0.type-check: exit 0. eslint on the touched files: exit 0, no errors.check:i18n-keys,check:i18n-drift,check:i18n-designer-parity,check:i18n-dead-keys(no longer listsengine.studio.home) andcheck-changeset-presence: exit 0.On
385fa92, before the merge:StudioDesignSurface.homeLoop-12513.test.tsx(header button goes to/studio; the switcher's first row is Studio home and goes to/studio; the org empty block links to Setup > Packaged automation and offers no create button; control: a package's empty block has no Setup link) andBuilderLanding.setupExit-12513.test.tsx(label, outward arrow, unchanged route; the packaged-automation route built from its ref).StudioDesignSurface.*.test.tsxandBuilderLanding.*.test.tsx, includingBuilderLanding.accessibleNames-12510: 88 files, 587 tests passed, exit 0.pnpm --filter @object-ui/app-shell test: exit 0. Test Files 1427 passed, 1 skipped (1428); Tests 13550 passed, 9 skipped (13559).build: exit 0, dist completeness verified.git diff HEADempty afterwards: header destination changed to/home; switcher row destination changed to/home; the package-less action arm disabled; the en label reverted; the route spelled withoutcomponent/.Acceptance notes
studio-readonly-link), still goes to Setup without saying so. It is outside this card's two exits and its file surface, so it is noted here and not changed.Generated by Claude Code