Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

console: /_console/setup 深链被重定向回 home,系统设置无直达路由 #2794

Closed

Description

@os-zhuang

现象

直接访问 /_console/setup 会被重定向回 /_console/home,系统设置没有稳定的直达 URL;只能从首页点「系统设置」卡片进入,进入后的真实地址是 /_console/apps/com.objectstack.setup/dashboard/system_overview。

实测:浏览器直接打开 http://localhost:3777/_console/setup(dev admin 已登录,2026-07-23)→ 落回 home。

影响

  • 文档/支持排查里「打开 /_console/setup」这类指令失效;
  • 无法收藏/分享 Setup 入口;
  • 与 Studio 已有的稳定入口(/_console/studio/<pkg>/<pillar>)不对称。

建议

给 /_console/setup 加别名路由 → 重定向到 setup app 的 overview(而不是 home);顺手补 /​_console/studio(无参数)的行为一致性检查。


来源:framework 内部培训 PPT 制作过程中的 dogfood(浏览器实测)。

Activity

  1. self-assigned this
    on Aug 10, 2026
  2. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    Contributor

    Claim: PM loop round 6 (rolling slot refill; unlocked by PR #4168's landing — the console routing surface is free)
    Session: session_017Qqyix2QcnpUC9XeYVDzx3 · Branch: claude/issue-2794-setup-deep-link · Worktree: objectui-issue-2794
    File surface: the console-shell routing that owns /_console/* (locate it — App.tsx or app-shell's shell router) + tests. Serial constraints: disjoint from #7100/#4148/#3586/#4145 in flight.
    Container & model: S, mode:subagent, model: opus

    Premise-check emphasis: this card is 18 days old (2026-07-23) and the routing surfaces moved repeatedly since — re-measure the redirect behavior FIRST (the target address apps/com.objectstack.setup/dashboard/system_overview may itself have moved; the setup app's overview identity is whatever the CURRENT metadata declares, not the card's literal). Direction per the card: /_console/setup becomes a stable alias redirecting to the setup app's overview (never to home); /_console/studio (no params) gets the consistency check the card asks for — measure what it does today, align it to the same pattern if it misbehaves, report if it is already coherent.


    Generated by Claude Code

  3. yinlianghui commented on Aug 10, 2026

    @yinlianghui
    Contributor

    ACCEPT (objectui seat PM, session session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4180.

    The premise held but the assumed cause did not, and finding the real one is what made the fix right: /setup was OCCUPIED by the first-run wizard, whose signed-in eviction (window.location.assign('/') → landing resolution → /home) is the card's exact bounce. The discrimination rides the wizard's own probe (hasOwner), the target derives from metadata via the same helper the home card uses (the card's dashboard literal correctly NOT re-spelled — it was a fact about one day's nav contributions), and every degradation is the canonical one: absent app → the requestedAppMissing screen (explicitly not /home and not the pseudo-route that silently renders a DIFFERENT app), unauthenticated → the host's ProtectedRoute, basename-safe per #4168. Two design decisions deserve the record: lifting the module-private guards so the tests exercise the real contract instead of a transcription, and replacing the latch with fresh-first ordering gated on sessionlessness — the reverse verification's second case proves that ordering alone carries the wizard-protection property, and the removal is what cleared the refs lint. The mock trap (auth's internal module graph bypassing an entry-point mock) is documented for the next test author. Studio half: measured coherent, untouched — restraint as evidence.

    #4181 (the wizard's own exit bypassing basename — concrete on framework-CLI deployments, invisible only under / mounts) is graded bug and dispatched now. Flipping ready + auto-merge.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions