越界发现,记录于 #3543(清理 console-architecture.md / console.md 的过期陈述)期间。按纪律只报不改,单独立单,未认领,留给 PM 分诊。
实测基线:origin/main @ b785a77b3。
现象
一个应用都没有的用户,在 console 里看到的唯一主 CTA「Create Your First App」点下去不会打开建应用向导,而是被重定向回落地页 /。
实测链路
-
空态渲染点(活的):packages/app-shell/src/console/AppContent.tsx:577
Button onClick={() => navigate('/create-app')} data-testid="create-first-app-btn"
前置条件是 !activeApp && !isCreateAppRoute && !isSystemRoute && !isMetadataRoute(同文件 568 行)。
-
'/create-app' 带前导斜杠,是绝对路径,因此从根路由树解析,而不是当前 /apps/:appName/* 子树。
-
apps/console/src/App.tsx 的根路由树里没有 /create-app:
grep -n "create-app" apps/console/src/App.tsx apps/console/src/AppContent.tsx
# 零命中
-
于是落到根路由树最后一条兜底(apps/console/src/App.tsx:354):
Route path="*" element={ Navigate to="/" replace }
→ 用户被弹回 /(RootLandingRedirect)。
真正声明 create-app 的是 shell 的 AppContent.tsx(path="create-app"),它挂在 /apps/:appName/* 子树内部 —— 包括同文件里那条「无 activeApp 时仍可进 create-app」的分支。也就是说目标路由存在,只是 CTA 指错了层级:应当指向该子树内的路径,而不是根路径。
影响
这是新用户的第一屏、且是该空态里唯一指向「建应用」的按钮(旁边的 go-to-settings-btn → /apps/setup 是好的,因为它落在 /apps/:appName/* 内)。点击后无声地回到落地页,没有任何报错,表现像「按钮没反应」。
备注
越界发现,记录于 #3543(清理 console-architecture.md / console.md 的过期陈述)期间。按纪律只报不改,单独立单,未认领,留给 PM 分诊。
实测基线:
origin/main@b785a77b3。现象
一个应用都没有的用户,在 console 里看到的唯一主 CTA「Create Your First App」点下去不会打开建应用向导,而是被重定向回落地页
/。实测链路
空态渲染点(活的):
packages/app-shell/src/console/AppContent.tsx:577前置条件是
!activeApp && !isCreateAppRoute && !isSystemRoute && !isMetadataRoute(同文件 568 行)。'/create-app'带前导斜杠,是绝对路径,因此从根路由树解析,而不是当前/apps/:appName/*子树。apps/console/src/App.tsx的根路由树里没有/create-app:于是落到根路由树最后一条兜底(
apps/console/src/App.tsx:354):→ 用户被弹回
/(RootLandingRedirect)。真正声明
create-app的是 shell 的AppContent.tsx(path="create-app"),它挂在/apps/:appName/*子树内部 —— 包括同文件里那条「无 activeApp 时仍可进 create-app」的分支。也就是说目标路由存在,只是 CTA 指错了层级:应当指向该子树内的路径,而不是根路径。影响
这是新用户的第一屏、且是该空态里唯一指向「建应用」的按钮(旁边的
go-to-settings-btn→/apps/setup是好的,因为它落在/apps/:appName/*内)。点击后无声地回到落地页,没有任何报错,表现像「按钮没反应」。备注
@object-ui/app-shell的DefaultAppContent,是通用组件;理论上某个宿主可以在根部自行声明/create-app从而让它成立。但本仓库的参考宿主apps/console没有声明,所以在 console 里它是断的。修法(指向子树内路径 / 由宿主声明根路由 / 改用相对跳转)涉及该组件的对外行为约定,留给分诊定夺。create-app/createFirstApp/Create Your First App/ 空态)搜过开放 issue,无同源单。