Skip to content

docs(skills): console-development.md 指路的 7 个 console 页面里 5 个不存在,并整节教用已删除的 MetadataManagerPage #3713

Description

@yinlianghui

越界发现,记录于 #3704(改写 ROADMAP.md :857 / :871 两条 PermissionManagementPage 记录)期间 —— 全仓 grep PermissionManagementPage 时,除 ROADMAP 两处外唯一的命中落在 skills/ 里。按纪律只报不改,单独立单,未认领。

不打 finding:与 #3712 那种「读者可能被误导」的纯台账漂移不同,skills/ 下的 guide 是本仓 agent 写 console 代码时的直接输入。照它写的人会去 import 五个不存在的组件。严重度留给分诊裁,但不按观察类归档。

基线:origin/main @ 36bf20235。

事实

一、目录树里 7 个 pages/system/ 页面,5 个今天不存在

skills/objectui/guides/console-development.md:52-63 的目录树逐条实测(find apps/console/src -name '<页面名>.tsx'):

guide 声称的文件 实测
SystemHubPage.tsx ✅ 存在
MetadataManagerPage.tsx ❌ 不存在
MetadataDetailPage.tsx ❌ 不存在
AppManagementPage.tsx ✅ 存在
UserManagementPage.tsx ❌ 不存在
RoleManagementPage.tsx ❌ 不存在
PermissionManagementPage.tsx ❌ 不存在

pages/system/ 现存 6 个页面,guide 一个都没提到其中四个:ProfilePage / AuditLogPage / ApprovalsInboxPage / AiPendingActionsPage。

PermissionManagementPage.tsx 的删除有据可查:commit cccdf84d(Slim apps/console for third-party customisation)删掉了它,26 行。UserManagementPage / RoleManagementPage 对应的 URL 今天是重定向(AppContent.tsx:203-205,PR #3673)。

二、整节「How MetadataManagerPage works」教的是一个不存在的组件

:92-100 一整节以 MetadataManagerPage 为主语讲注册表驱动的五步渲染流程,:280 给出把它挂到 metadata/:metadataType 的路由示例(JSX,此处不引原文以免正文消毒器吃掉尖括号)。实测:

  • MetadataManagerPage 在 apps/console/src/ 下零文件、零引用;
  • 该路由今天解析到的是 MetadataRedirect(AppContent.tsx:188);
  • guide 反复引用的注册表文件 config/metadataTypeRegistry.ts 在 apps/console/src/ 下也不存在(该目录下与之最接近的是 services/MetadataService.ts)。

其中 :88 处的 listComponent?: React.ComponentType< MetadataListComponentProps > 扩展点亦随之无处落地。

复核方式

for n in SystemHubPage MetadataManagerPage MetadataDetailPage AppManagementPage \
         UserManagementPage RoleManagementPage PermissionManagementPage; do
  find apps/console/src -name "$n.tsx" | grep -q . && echo "EXISTS $n" || echo "MISSING $n"
done
grep -rn 'MetadataManagerPage' apps/console/src/          # 零命中
find apps/console/src -name 'metadataTypeRegistry*'       # 零命中
ls apps/console/src/pages/system/

影响面

与 ROADMAP 漂移不同,这里的消费者是 agent。skills/objectui/evals/console-development.json:7 的 expected_output 也把 MetadataManagerPage 写进了期望答案,即这条漂移已经被固化进评测基线 —— 照 guide 生成的代码会被 eval 判为「对」。

修法方向(留给分诊,不预判)

至少三种取舍,不在本单裁定:

  1. 目录树与章节按 apps/console/src/pages/system/ 现状重写(需同步 evals/console-development.json);
  2. 若 registry-driven 元数据页是仍要做的方向,则 guide 描述的是未来形态,应改成显式的「planned」而非现状陈述;
  3. 该 guide 是否还该继续描述 apps/console 的内部结构 —— commit cccdf84d 之后 console 已被瘦身成参考装配,第三方走 console-starter 模板。

方向 2 与 3 会决定要不要保留这些名字,故不宜由实现座位替维护者选。

关联

已就关键词(console-development.md、MetadataManagerPage、skills guide)搜过本仓开放 issue,无同源单。


Generated by Claude Code

Activity

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

    @yinlianghui
    CollaboratorAuthor

    PM 裁决(维护者已授权代裁,session_01GTRjn8xBqp75dk7kFupVRt):方向 1(按现状重写 + 同步 eval),吸收方向 3 的既定事实。

    理由:方向 1 是事实恢复,零产品承诺、完全可逆;方向 3 不是待选项 — commit cccdf84 的提交信息已是落地决策(console 瘦身为参考装配、第三方走 console-starter),guide 引用它即可;方向 2 的「planned」标注需确认一个无法核实的路线图意图 — 跳过,日后要恢复 registry 页补一节是可逆小事。eval 同步是本单的牙:期望输出烤入错误组件名,不改它,照旧指南生成的错误代码继续被判对。

    据此认领。分支:claude/issue-3713-skills-guide-truth。文件面:skills/objectui/guides/console-development.md + skills/objectui/evals/console-development.json。处置:目录树按 pages/system/ 现状 6 页重写;「How MetadataManagerPage works」整节按真实机制改写(四条 URL 是 SystemObjectRedirect 到框架对象,#3673/#3655 腿;registry 驱动的资源页真身在 packages/app-shell 的 metadata-admin,metadataTypeRegistry.ts 不存在);路由示例与扩展点随之修正;加一句参考装配定位(引 cccdf84);eval 的 expected_output 同步为真实组件/形态;纠错锚形态保留被删名字 + 紧跟判词;#3656 措辞。⚠️ 与在途 #3655 腿(apps/console)零文件相交但事实相交 — permissions 重定向落地后 guide 措辞应与之一致,动手前 fetch 看其 PR 是否已落,未落则按「4 条重定向 + permissions 待落地(#3655 已裁 A)」的措辞写,避免抢跑。


    Generated by Claude Code

  3. yinlianghui commented on Aug 8, 2026

    @yinlianghui
    CollaboratorAuthor

    实现完成 -> DRAFT PR #3729(session_01GTRjn8xBqp75dk7kFupVRt,分支 claude/issue-3713-skills-guide-truth)。

    前提复核:issue 结论逐条成立,7 页面表实测与正文一致(5 缺 2 在),MetadataManagerPage / metadataTypeRegistry / MetadataTypeConfig / registerMetadataType / getMetadataTypeConfig / pageSchemaFactory / listComponent / MetadataListComponentProps 在 packages+apps 全部零命中。

    按裁决六条逐条落地,三处需 PM 知晓的偏离/补充:

    1. cccdf84d7 的可引用性与 PR chore(console): 删除全仓零引用的 SystemObjectViewPage + systemObjects (#3672) #3699 正文相反 —— chore(console): 删除全仓零引用的 SystemObjectViewPage + systemObjects (#3672) #3699 称它不是 main 祖先(当时 main 仅 203 个 commit)。今天 origin/main 有 7517 个 commit,git merge-base --is-ancestor 返回 ANCESTOR,提交信息可读。故参考装配定位那句放心引了它(AppContent.tsx:110 也已在引)。
    2. console: 系统导航 / System Hub 的 users / organizations / roles / positions / permissions 五个入口没有对应路由 —— 两个落 "Page not found",三个跳进不存在对象 system 的记录页 #3655 permissions 腿实测未落 main —— AppContent.tsx 仍只有四行重定向、:191-202 的「故意缺席」注释仍在。故按派发单要求写「四条重定向 + permissions 已裁 A(sys_permission_set)待落地」,并给出自查指令,不抢跑。
    3. eval 校验方式:本仓没有 runner —— scripts/ / .github/ / package.json / turbo.json 对 evals 零引用。故逐字段人工核对 + 一次性核对脚本(未进提交):87 项全绿;把旧两文件放回做逆向验证 23 项 FAIL,红点逐条落在预测位置,且被删名字的锚外计数与改前实测计数逐条相等。顺带查出 eval 2 的 registerWidgets 断言连改前的 guide 里也不存在,从来无法满足。

    must_not_contain 的取舍已写在 PR 正文:只把 registerMetadataType / pageSchemaFactory(纯 API 用法)列为反模式,不把 MetadataManagerPage / MetadataDetailPage 列进去 —— 一个正确答案可能顺口说「那个已删」,会造成假红;牙由正向断言补足(旧指南生成的答案同时丢 must_contain 并命中反模式,两条独立失败)。

    越界发现两单,均未认领:#3730(同一 guide 其余三处表格的路径漂移,未打 finding)、#3731(buildObjectDetailPageSchema 零调用者,已打 finding)。均不在本单授权文件面的处置清单内,本 PR 一行未改。

    无 changeset(skills/ 无 package.json、根 package 私有无 files、对任何包产物零 delta,与 #3656 同判据)。未碰 apps/console 源码 / ROADMAP.md / content/docs/releases/。PR 保持 draft,未 undraft 未 merge。


    Generated by Claude Code


    Generated by Claude Code

  4. yinlianghui commented on Aug 8, 2026

    @yinlianghui
    CollaboratorAuthor

    验收:PR #3729 ACCEPT(会话 session_01GTRjn8xBqp75dk7kFupVRt,PM 循环)。

    交付内容

    • skills/objectui/guides/console-development.md 对齐真实代码:页面树 = pages/system/ 真实 6 页(补入原 guide 漏掉的 Profile/AuditLog/ApprovalsInbox/AiPendingActions 四页,AuditLogPage 按实测注明是手写 REST fetch 不经 ObjectView);12 个退休名收敛进「Retired names」纠错锚(每名恰 1 次、锚外 0),逐条给判词 + 活体替代物真实路径。
    • evals:eval 1/2 断言全部换成可解析的真实符号(registerMetadataResource/listColumns/createFields/ComponentRegistry/SchemaRenderer 等);移除从来无法满足的 registerWidgets 断言(该名连改前 guide 里都不存在);eval 3 实测四符号今日仍真,如实未动。MetadataManagerPage/MetadataDetailPage 刻意不进 must_not_contain 的取舍(防"正确答案顺口提及已删名"假红)已在 PR 正文写明,牙由正向断言双路补足。

    PM 复核(git 实物,REST 限流窗口内执行):文件面精确(仅 skills/ 两文件,零源码 delta);退休名抽查 6 名计数逐条为 1;页面树与 origin/main git ls-tree 相等;5 个 must_contain token 全部解析到真实代码;逆向验证 23 项 FAIL 逐条吻合预测。

    挂账:PR #3728(permissions 腿)落 main 后,删除 guide 中 "not yet on main" 半句(guide 已给读者自查指令,过渡期无害)。dev 自立 #3730(同 guide 其他章节 13 符号指错目录)/ #3731(buildObjectDetailPageSchema 零调用者三选一)跟踪同源漂移。


    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