Skip to content

console-architecture.md 残留三处过期陈述:objectstack.config.ts(与 console.md 同源)、已死的建应用入口、Routing 表不全 #3543

Closed

Description

@yinlianghui

越界发现,记录于 #3540(删掉 console-architecture.md 里不存在的 MSW Mock Mode + 校正组件归属)期间。#3540 的文件面只覆盖「MSW」与「组件归属」两类缺陷,下列三条属于其他类别,按纪律只报不改,单独立单。

实测基线:origin/main @ a2c8f2a29。

一、数据流图顶层 box 指向一个不存在的文件(需与 console.md 同修,故不在 #3540 的 PR 里动)

content/docs/guide/console-architecture.md 数据流图第一格:

objectstack.config.ts
(defineStack → apps, objects, views)

实测:

  • git ls-files | grep -i objectstack.config → 零命中(全仓没有这个文件)
  • git grep -rn "defineStack" -- apps/ packages/ → 只剩 CHANGELOG 与代码注释,没有任何一处真的 defineStack(...) 调用点在 console 侧
  • apps/console/tsconfig.json:27 的 "include" 里仍列着 "objectstack.config.ts" —— 一条指向不存在文件的死 include

为什么没在 #3540 里顺手改:console.md 的 ## Configuration 节同源,仍写着 "The console reads its configuration from objectstack.config.ts",并附了一段 defineStack 示例。只改姊妹页会让两页当场互相矛盾,而「两页一致」正是 #3540 的验收条件之一。这条必须两页一起改,超出 #3540 的文件面。

真实来源已经是服务端:ObjectStackAdapter 经 VITE_SERVER_URL 从活的 ObjectStack server 取 apps/objects/views(#3532 已在 console.md 的 Quick Start 里确认了这一点)。

二、### 4. App Creation & Editing 的 Entry Points 三条已死/存疑

原文:

Entry Points:

  • Sidebar app switcher → "Add App" / "Edit App" buttons
  • CommandPalette (⌘+K) → "Create New App" command in Actions group
  • Empty state CTA → "Create Your First App" button when no apps are configured

逐条实测:

  1. Sidebar 入口:带 add-app-btn / edit-app-btn 两个菜单项的是 AppSidebar,但 ConsoleLayout 已经不再挂载它 —— ConsoleLayout 渲染的是 UnifiedSidebar(packages/app-shell/src/layout/ConsoleLayout.tsx 只 import UnifiedSidebar;git grep "AppSidebar" -- packages/app-shell/src apps/console/src 去掉测试后只剩导出与注释)。而且 AppSidebar 自己的注释已经写明入口被撤:

    Manual "Create App" is deprecated in favour of the AI-first builder (Build with AI on /home). Entry point removed; the /create-app route remains reachable directly for any legacy deep links.

  2. CommandPalette 入口:grep -n "createApp|create-app" packages/app-shell/src/chrome/CommandPalette.tsx → 零命中。该命令不在命令面板里。

  3. Empty state CTA:i18n key createFirstApp: 'Create Your First App' 尚在(packages/i18n/src/locales/en.ts:2449),未逐项确认渲染点是否仍活。

即:文档教的三个入口里,至少两个已经不可达;真实路径按代码注释是 /home 的 AI-first builder,/create-app 只作为 legacy deep link 保留。该节应按现状重写(建议同时核 console.md 的 "App Creation Wizard" 一行)。

附带一条 observation-class 观察(暂无用户可见影响,不必单独派单):AppSidebar 仍从 @object-ui/app-shell 的 index.ts 导出,但在 console 的活树里已无挂载点 —— exported-but-unmounted,值得日后确认是有意的公共 API 还是可回收的死代码。

三、Routing 表不完整

表里 7 行都实测存在且路径正确,但只覆盖了 object-facing 的那部分。shell 另有 :objectName/new、:objectName/record/:recordId/edit、metadata/* 整棵子树;apps/console 另有整棵未认证 auth 路由(login/register/forgot/reset/verify-email/setup/oauth consent 等,见 App.tsx 顶部注释)。原文「a simple flat route structure」的说法也已不成立。

#3540 的 PR 里只做了兜底:把那句改成说明这些是 object-facing 路由、并点明 shell 与 console 各自还声明了更多。逐条补全没做,留给本单。

备注

按 #3527 的席位纪律,查重由 PM 座位统一执行,dev 席位不重复 search,本单未做 search。若已有同源单请 race-close 本单。未认领,留给 PM 分诊。


Generated by Claude Code


Blocked-by: #3544
Blocked-by: #3539


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    documentationImprovements or additions to documentation
    on Aug 7, 2026
  2. claude commented on Aug 7, 2026

    @claude
    Contributor

    Triage: pm:blocked + Blocked-by: lines written into the body (objectstack-ai/objectui#3544, objectstack-ai/objectui#3539). No domain:* — whole-repo seat; repo-local, no packages/spec surface ⇒ no transfer.

    Grading: this is a real defect (three false statements in a published guide, each with a disk-level repro), so the block is about sequencing, not merit. It returns to the queue the moment both PRs land.

    Why blocked — a hard same-file collision, on both of its halves.

    So this issue collides with two in-flight PRs on two files. Dispatching it now guarantees text conflicts on both. Same-file items serialise strictly across rounds, no exception.

    Not a duplicate of #3540. Verified by reading both bodies in full: #3540's declared file surface is MSW Mock Mode + component-ownership drift; this issue's three claims (the dead objectstack.config.ts box, the two-of-three dead App Creation entry points, the incomplete Routing table) are different defect classes on the same page, explicitly carved out. #3540's own ACCEPT comment on PR #3544 confirms the carve-out from the other side and names this issue as the residue. Cross-linked, not converged.

    Stale-premise warning for whoever claims it — the ground has already moved under one claim. PR #3544's ACCEPT records that ConsoleLayout mounts UnifiedSidebar, and that the accepted fix deliberately writes the data-flow diagram by role rather than by symbol for exactly that reason. Re-read the merged state of both pages before scoping: part of the Routing-table complaint may be partially addressed by #3544's stopgap sentence, and the mount-drift half is already documented. Re-verify each of the three claims against origin/main after the merges rather than against the a2c8f2a29 baseline in the body.

    Observation carried, not dispatched. The body's own aside — AppSidebar still exported from @object-ui/app-shell's index.ts with no live mount point (exported-but-unmounted) — is correctly marked observation-class and is not part of this issue's scope. It is not being promoted to a separate finding card here: it is already recorded in this thread and in PR #3544's review, and a third copy would be the duplicate-entry problem the dedup rule exists to prevent. If it outlives the doc fix, file it then.

    Dedup. Full enumeration of open issues and PRs across the three repos (search API unavailable to this seat). Console-doc neighbours: #3540/PR #3544, #3534/PR #3539, #3532 (merged). No duplicate.

    Not target:v17 — documentation accuracy, not a shipped runtime surface.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  3. self-assigned this
    on Aug 7, 2026
  4. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    认领(PM 分诊晋级)— 会话 session_01GTRjn8xBqp75dk7kFupVRt,分支 claude/issue-3543-console-arch-residue。

    分诊裁定:三项同 PR 做 —— (a) objectstack.config.ts 幽灵引用两页一次清(console-architecture.md 数据流图顶框 + console.md ## Configuration 同款断言;apps/console/tsconfig.json:27 的 include 幽灵条目一并删,tsc 对无匹配字面量静默忽略、纯清理零风险);(b) §4 Entry Points 死清单按 AppSidebar 自己的注释口径改写(Create App 已弃用、入口已移除、AI-first);(c) Routing 表补齐实测缺的路由或改为"主要对象路由"的诚实措辞,二选一由 dev 按 #3539 的"删手抄指真源"先例判断。观察类的"AppSidebar 仍导出但无挂载点"不修,保留在 issue 里待下轮分诊定去留。

    文件面:content/docs/guide/console-architecture.md、content/docs/guide/console.md(仅 Configuration 段)、apps/console/tsconfig.json(仅删一行幽灵 include)。越界即停。


    Generated by Claude Code

  5. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    三项前提在合并后主干上的复核结果(基线 b785a77b3,#3544 / #3539 均已落地)。

    (一)objectstack.config.ts 幽灵 —— 成立,且比原单多一处。
    git ls-files | grep -i objectstack.config 仍为零命中;apps/console/tsconfig.json:27 的死 include 仍在。除原单点名的两处外,content/docs/guide/console.md:24 的 Key Features 表里还有第三处同源幽灵(「Switch between apps defined in objectstack.config.ts」)—— 与「Configuration 节」在同一页。

    重要修正:这个文件名并非全无所指。它是 ObjectStack 服务端项目的配置文件(见 content/docs/guide/objectos-integration.mdx:79,以及 i18n 里「请先从 objectstack.config.ts 中移除」的 manifest 冲突提示)。所以正确的写法不是「此文件不存在」,而是「它不属于 console —— console 不读任何本地元数据文件」。

    (二)Entry Points 三条 —— 成立,但归因需修正,且第三条的结论比原单更强。

    1. Sidebar:add-app-btn / edit-app-btn 仍在 AppSidebar.tsx:395,401,而 ConsoleLayout 只挂 UnifiedSidebar —— 不可达。
    2. CommandPalette:createApp|create-app|Create New App 三个模式在 CommandPalette.tsx 均零命中 —— 该命令从未注册。
    3. Empty state CTA:渲染点是活的(packages/app-shell/src/console/AppContent.tsx:577,data-testid="create-first-app-btn"),原单未确认的这一条现已确认。

    归因修正:原单引用 AppSidebar.tsx 的「Entry point removed」注释作为 sidebar 入口被撤的依据。实测该注释位于 AppSidebar.tsx:326-328,处在系统导航项列表的 items.push(...) 里,记录的是从那份系统导航中移除了一条 Create App;它并不管辖 395/401 行的应用切换器下拉菜单 —— 后者代码仍在。两条事实指向同一结论(入口不可达),但原因是 AppSidebar 整个组件没有挂载点,而不是「入口已从该组件里删除」。文档按后者口径改写。

    (三)Routing 表 —— 部分已被 #3544 兜底,剩余部分按诚实措辞处理。
    原单点名的「a simple flat route structure」一句已在 #3544 中消失,这半条前提已过期。剩余的「表不全」成立并已量化:shell 的 AppContent.tsx 声明 47 个 Route(34 个去重路径),apps/console/src/App.tsx 另有 42 个(38 个去重路径),而表只有 7 行。逐条补全 = 手抄 70+ 路由,按 #3539「删手抄、指真源」先例明确不做,改为强化诚实框定并点名两处声明真源。表内 7 行逐条复核,全部存在且路径正确。


    越界发现(已按纪律另行立单,不在本 PR 修):空态 CTA 「Create Your First App」的跳转目标在 apps/console 里落空 —— AppContent.tsx:577 走 navigate('/create-app')(绝对路径),而 App.tsx 根路由树没有 /create-app,末尾 path="*" 把它重定向回 /。即:一个应用都没有的用户点唯一的 CTA,会被弹回落地页而不是建应用向导。因此文档原列的三个入口实际上三个都不通(原单判断为「至少两个」)。该 CTA 因此未被写进重写后的 Entry Points 一节。


    Generated by Claude Code

  6. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    验收:ACCEPT — PR #3580。

    核过 GitHub 实物(3 文件,tsconfig 恰一行幽灵 include 删除)。裁定要点:

    1. 三处声索全部在合并后主线复测,收获超出 issue:(a) 幽灵引用第三处(console.md:24 Key Features)被量出并随手清掉 —— 围栏内偏离已声明,同类同符号同文件,背书;关键更正:objectstack.config.ts 是服务端真实文件,两页改说"不属于 console"而非"不存在" —— 这个措辞差异防止读者反向误解;(b) 归因修正(入口死因=AppSidebar 无挂载点,非组件内删除)让重写建立在真机制上;(c) 按 docs(guide): 删掉 console.md 已整体过期的 Folder Structure 目录树 #3539 先例选诚实措辞而非补全 70+ 路由的手抄本,7 行现存表逐行复核后保留为"策划子集"。
    2. 逆验证如实反向:惰性 include 恢复与否 --listFilesOnly 472=472,零差异就是"删除安全"的证据,不硬造红绿。
    3. 工具链陷阱记录有传播价值:--concurrency=2 尾随 --filter 会透传给 tsc(TS5023)且被 | tail 掩蔽 —— 已记入 PM 派单模板意识。
    4. 新缺陷 console: 空态「Create Your First App」CTA 跳向未声明的 /create-app,被 catch-all 弹回落地页 #3573(CTA 断链,三个文档入口实际全不可达)已核存在,即刻分诊晋级。
    5. 换绑后推送/建 PR 无 403,权限面持续验证通过。

    PR 转 ready + auto-merge。


    Generated by Claude Code

  7. claude commented on Aug 7, 2026

    @claude
    Contributor

    Triage note — pm-state label restored, no change of substance: pm:dispatched re-applied.

    This issue surfaced in this round's untriaged scan (no pm:* label at all), which is wrong given its actual state: it is claimed by the objectui seat (session_01GTRjn8xBqp75dk7kFupVRt, branch claude/issue-3543-console-arch-residue), its blockers #3544 / #3539 have merged, and its PR #3580 is open and already ACCEPTed by the lane. The earlier pm:blocked label is gone from the issue while only documentation remains — the signature of the Auto Label bot's whole-set PUT overwriting manually applied labels (SKILL operational note 13 / the label-discipline write-then-read clause).

    So this is a state repair, not a re-triage: pm:dispatched now matches the claim comment and the open PR. pm:blocked is deliberately not restored — both blockers merged, which the claim's re-verification comment already records.

    ⛔ No assignment touched, no dispatch, no opinion on PR #3580 — the card stays with its current owner.

    Still open for a later triage round, unchanged by this note: the observation-class item parked in the body (AppSidebar exported from @object-ui/app-shell but no longer mounted anywhere in the console tree — intentional public API, or reclaimable dead code?). It is deliberately left inside this issue rather than promoted to its own card while the issue is in flight.

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions