Skip to content

docs(ROADMAP): P1.12 Routes/Tests 两条 PermissionManagementPage 记录按现实改写 (#3704) - #3714

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3704-roadmap-subblocks
Aug 8, 2026
Merged

docs(ROADMAP): P1.12 Routes/Tests 两条 PermissionManagementPage 记录按现实改写 (#3704)#3714
yinlianghui merged 1 commit into
mainfrom
claude/issue-3704-roadmap-subblocks

Conversation

@yinlianghui

@yinlianghuiyinlianghui commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Fixes#3704

纯文档改动,只动 ROADMAP.md 的两行(:857 / :871),零代码、零行为变化。无 changeset —— 根文档不是发布包,用户可见产物零 delta。git diff --stat = 1 file changed, 2 insertions(+), 2 deletions(-),行号不移位。

前置实测

派发单要求先证 PR #3705 已落 main,并以内容锚定复核行号(#3705 是 15 增 15 删的中性改动,理应不移位):

git merge-base --is-ancestor 35e84b65f origin/main → PR3705 commit IS ancestor of origin/main
grep -n 'PermissionManagementPage' ROADMAP.md → 857 / 871 ✅ 与 issue 记载一致

基线 origin/main @ 36bf20235(已含 PR #3705 与 PR #3711)。

前提复核(issue 是线索不是规格)

issue 的三条断言逐条对 origin/main 实测,全部属实:

断言实测证据
PermissionManagementPage 组件不存在grep -rnapps/packages/ = EXIT=1 零命中;pages/system/ 现存 6 个页面,无此文件
/system/permissions 路由不存在grep -n 'path="system/permissions"' AppContent.tsx = EXIT=1;:138 / :191 两处注释写明「deliberately NOT redirected」「absent on purpose」
相应测试随页面消失全仓 *.test.tsx grep PermissionManagementPage 零命中

额外查到 issue 未记的一条硬证据 —— 删除该页的 commit 有名有姓:

git log --all --diff-filter=D -- '*PermissionManagementPage*'
→ cccdf84d7 Slim apps/console for third-party customisation
.../src/pages/system/PermissionManagementPage.tsx | 26 ----------------------

这正好坐实了 #3705 已写在 :826 的那句「deleted when apps/console was slimmed for third-party customisation」,于是本 PR 把裸引用从泛指升级为可复核的 (commit cccdf84d),合乎本文件 :1046(commit 3371239c) 的既有形态。

惯例:沿用 #3705 已确立的手法

#3705 已把这个文件对「已退场」项的处理考据清楚(:152 / :157 / :1046 / :997 / :82):历史账本 + 就地批注 —— 条目不删、不打删除线,文字改写成「当前形态」并挂一个裸文本引用。本 PR 照办,因此未新增任何 markdown 链接(git diff 中新增行 grep ](...) = 零命中),check-doc-links 的扫描面不受影响。

前后对照

**Routes:** 子块(:857)

改前:

- [x] `/system/permissions` → PermissionManagementPage

改后:

- [ ] `/system/permissions` — no route is declared at this URL; the `PermissionManagementPage` it named was deleted when `apps/console` was slimmed for third-party customisation (commit cccdf84d), and the successor surface is pending maintainer decision, see #3655

**Tests:** 子块(:871)

改前:

- [x] 11 new tests (SystemHubPage, AppManagementPage, PermissionManagementPage)

改后:

- [x] New tests for the system pages — of the three suites named here, only `SystemHubPage`'s is still in the tree; nothing tests `AppManagementPage` today, and `PermissionManagementPage` has no tests because the page itself is gone (commit cccdf84d)

四处刻意的取舍

1. :857 改成 - [ ](未勾选),与 #3705:835 对齐。 它不是「做完了又退场」,而是一个尚未定案的缺口。更要紧的是内部一致性:#3705 已把 P1.12.2 里的同一条路由(:835)判为 - [ ],若本 PR 让 :857 留在 - [x],同一 ### P1.12 章节里两条讲同一个 URL 的记录会自相矛盾。全文 89+ 处 - [ ],未勾选是本文件的常规形态。

2. ⛔ 不预判 #3655 的 A/B/C。 措辞只陈述「未声明路由」这个事实并中性指向 #3655,不点名sys_capability / sys_permission_set 中的任何一个 —— 那两个名字在 :826 / :835 已各出现一次,此处第三次复述既冗余又更易被读成倾向。

3. 两个 PermissionManagementPage 作纠错锚保留,且判词紧跟其后。 全文该词仍是 2 处(改前 2 → 改后 2),但两处的下一句都已是结论::857 是「…was deleted…」,:871 是「…has no tests because the page itself is gone」。下一个 grep 到它的 agent 读到的是判词而非诱饵 —— 与 :82 保留 @object-ui/tenant:152 保留 ViewDesigner#3705 保留 SystemObjectViewPage / sys_org 同一手法。

4. :871 不写新硬编码计数(照 #3705 第 9 项)。 原文的 11 正是烂掉的那种数;改写后只说「三套里只剩 SystemHubPage 这一套还在树里」,不再种一个下周会再次失真的数字。

措辞纪律(遵 #3656:不复植承载错误机制的特征词)

特征词改前改后
路由活映射形态 `/system/permissions` + 箭头10
11 new tests(本围栏内)10
PermissionManagementPage(纠错锚,刻意保留)22

第一版草稿把 :857 写成 - [ ] /system/permissions → PermissionManagementPage — …,箭头与组件名仍在活映射位,一眼扫过去仍像在陈述现行路由,纠正语只是尾随 —— 与 #3705 初稿把 via ObjectView 留在主语位是同型错误。改成把组件名降到从句(the PermissionManagementPage it named was deleted)后该形态才真正归零。如实记下。

注:grep -c '11 new tests' ROADMAP.md 改后仍为 2,是 :489:1778 两条 —— 分别讲 DashboardDesignInteraction 与 getResponsiveSpanClass,与本漂移无关,亦在围栏外,未动。

验证

改动不含代码,本仓无任何测试或脚本读取 ROADMAP.md 的正文(scripts/__tests__/check-doc-links.test.ts 里的 ROADMAP 是内存里合成的 fixture,与真实文件无关),故没有可跑绿的单元测试 —— 如实写明,不凑数。真正管这块的是 doc-links 门禁,ROADMAP.md 是它 SCAN_ROOTS 的第 5 个扫描根(check-doc-links.mjs:397,rule: 'disk')。

改前 baseline: node scripts/check-doc-links.mjs → Links are valid across 7 scan roots. EXIT=0
改后: node scripts/check-doc-links.mjs → Links are valid across 7 scan roots. EXIT=0

阳性对照(先预测,后运行) —— 前后同为绿,必须先证「门禁确实读了我改的那两行」,否则绿是「没看」而不是「没问题」。预测:分别往 :857:871(本 PR 仅有的两条改动行)注入死链,门禁应各转红一次并点名该行号。两次实测均吻合:

注入 :857 → Found 1 broken link (1 distinct target):
- [example-relative] ROADMAP.md:857 -> ./docs/adr/9999-does-not-exist.md EXIT=1
还原 → Links are valid across 7 scan roots. EXIT=0
注入 :871 → Found 1 broken link (1 distinct target):
- [example-relative] ROADMAP.md:871 -> ./docs/adr/8888-nope.md EXIT=1
还原 → Links are valid across 7 scan roots. EXIT=0

还原后残留核查:grep -c 9999 = 0、grep -c 8888 = 0、grep -c 'neg-control\|neg2' = 0,git status --shortM ROADMAP.md

控制字符(门禁 + 门禁盲区自扫):

node scripts/check-control-bytes.mjs → OK (scanned 3684 tracked text file(s); skipped 85 binary) EXIT=0
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]' ROADMAP.md → 无输出(EXIT=1,干净)

PR #3711 新加的版本字面量门禁扫描面是 content/docs 与各包 README,不含 ROADMAP.md;本 PR 亦未引入任何版本号,无交集。

围栏

  • CHANGELOG.md 未动 —— 史实记录,记的是「当时确实做了这件事」,不该被改写。
  • content/docs/releases/ 未动;无 changeset。
  • ⛔ 代码零改动,AppContent.tsx 只读不写。
  • 同在两个子块内、但与 PermissionManagementPage 无关的两条失实记录未动 —— 见下。

围栏内的两条「不动」,与理由

派发单把文件面给到「两行及其所在子块」,故下面两条虽在围栏内,仍刻意不改,已另立单:

  • :858- [x] /system/metadata/:metadataType → MetadataManagerPage —— MetadataManagerPageapps/console/src/ 零文件零引用,该路由今天解析到 MetadataRedirect(AppContent.tsx:188)。不搭车的理由:它不是孤例,而是整片 P1.12.3 漂移的入口(:862 / :868 / :999 都仍把它当现役组件),单行修补会让 :858 与紧邻的 :860-868 自相矛盾,而 P1.12.3 段在围栏外。
  • :872- [x] Total: 20 system page tests passing —— 实测窄读(pages/system/__tests__/)13 条、宽读(併入 AppContent.systemHubRoutes.test.tsx)18 条,都不是 20不搭车的理由:「system page tests」这个指称本身没有定义(相关套件散在 apps/consolepackages/app-shell 至少 7 个文件),要改先得裁定它指哪一组,或照 docs(ROADMAP): 按 #3673/#3699 落地后的现实改写 P1.12.2 与 Permission Management 两段 (#3700) #3705 第 9 项干脆不写计数 —— 那是一次独立取舍,不该由本 PR 替维护者做。

两条与 :857 / :871 的分野是清楚的:后者的判据是同一个主语(PermissionManagementPage),修补半径完全落在围栏内;前者是另一个主语,修补半径伸出围栏。

越界发现(只报不改)

立单前已就 MetadataManagerPage / ROADMAP drift / P1.12.3 / console-development.md / skills guide 搜过本仓开放 issue,除 #3704 外无同源单。


🤖 Generated with Claude Code

https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt

…#3704)
:857 与 :871 是 #3700/#3705 围栏外的同源漂移:`/system/permissions` 路由
今天未声明(AppContent.tsx:191-201 注明「absent on purpose」),
PermissionManagementPage 已随 apps/console 瘦身删除(commit cccdf84),
其测试亦零命中。
照 PR #3705 的落地手法:条目不删、就地改写成当前形态并挂裸文本引用;
permissions 空缺保持中性、只指向 #3655,不预判 sys_capability /
sys_permission_set;PermissionManagementPage 作纠错锚保留(判词紧跟其后);
计数不写新硬编码数字。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@vercel

vercelBot commented Aug 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredAug 8, 2026 12:10am

Request Review

@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 8, 2026
@yinlianghui
yinlianghui marked this pull request as ready for review August 8, 2026 00:13
@yinlianghui
yinlianghui added this pull request to the merge queueAug 8, 2026
Merged via the queue into main with commit 0cf8f0fAug 8, 2026
6 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3704-roadmap-subblocks branch August 8, 2026 00:14
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Aug 10, 2026
…jectstack-ai#3712) (objectstack-ai#3732)
objectstack-ai#3704 / PR objectstack-ai#3714 的围栏之外还剩两处同源漂移:
一、MetadataManagerPage 整片(:858 / :862 / :868 / :999)。该组件在
apps/console/src/ 下零文件零引用;`/system/metadata/:metadataType` 今天的
route element 是 MetadataRedirect,一跳转到 metadata-admin 引擎自己的
metadata/:type,元素为 MetadataResourceListPage
(packages/app-shell/src/views/metadata-admin/ResourceListPage.tsx),由引擎的
MetadataResourceRegistry 驱动。:999 所指的 ObjectManagerListAdapter 与
listComponent 两个载体亦均零命中 —— object 根本不需要自定义列表,由
builtinComponents.tsx 的 registerMetadataResource({ type: 'object', … })
接入通用外壳;引擎侧对应的插槽是 MetadataResourceConfig.ListPage,今天只有
datasource 覆写它。故连紧邻的 :1000(listComponent 判词的另一半)一并改写,
否则 :999 改完与它自相矛盾 —— 这正是分诊裁定要避免的形态。
二、:872 `Total: 20 system page tests passing`。「system page tests」无固定
指称(窄读 13、宽读 18,皆非 20),照 :871 / PR objectstack-ai#3705 先例**不种新计数**,
改写为不含硬编码数字、并提示按需自行度量的表述。
手法沿用 objectstack-ai#3700 / PR objectstack-ai#3705:条目一律不删、就地按现实改写、原 [x] 保留(里程碑
确实以另一形态交付过)、错误名保留作纠错锚且判词紧跟其后、引用只挂裸文本编号、
不新增任何硬编码计数、不写版本号字面量。
围栏外另有 P1.12.3 / P1.16 的残余漂移(config/metadataTypeRegistry.ts、
listMode、MetadataGrid 等),按纪律只报不改,另立单。
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Aug 10, 2026
…ectstack-ai#3858)
objectstack-ai#3712 / PR objectstack-ai#3732 的围栏(MetadataManagerPage / listComponent 一族)之外,
P1.12.3 与 P1.16 两节还剩九条失实条目。手法沿 objectstack-ai#3700 / PR objectstack-ai#3705objectstack-ai#3704 /
PR objectstack-ai#3714objectstack-ai#3712 / PR objectstack-ai#3732:条目一律不删、就地按现实改写、原 [x] 保留、
错误名保留作纠错锚且判词紧跟其后、引用只挂裸文本编号、不种新计数。
P1.12.3 四条:
- metadataTypeRegistry —— 全仓零命中。但它并非"从未存在":文件确实以
apps/console/src/config/metadataTypeRegistry.ts 落过地(d601ef6 加入),
在 ff9a0d9(移除 studio app、迁往 metadata-admin 引擎)被删。今天的等价物
是引擎自己的 MetadataResourceRegistry
(packages/app-shell/src/views/metadata-admin/registry.ts),行类型
MetadataResourceConfig,由 registerMetadataResource() 填;且未注册的类型
同样可列可编,注册只是覆写默认值 —— "centralized config" 的语义也变了。
- SystemHubPage 注册表生成卡片 —— metadataTypeCards 是手写字面量
(Applications / Metadata / Datasources),其上方注释自述 per-type 卡片
在引擎开始自动列举全部类型后即被移除;dashboard / page / report 三张卡
都不存在。真正按注册表列举类型的是引擎的 MetadataDirectoryPage。
- 动态 /system/metadata/:metadataType —— 该拼法只在 console host fragment
(apps/console/src/AppContent.tsx)声明,三种 arity 的 route element 都是
MetadataRedirect,并非页面。真正渲染的动态路由是引擎的 metadata/:type
(packages/app-shell/src/console/AppContent.tsx);"in all route contexts"
这半句对它成立(with-app 与 zero-app 两支都声明了),故如实保留。
- app / object 专属路由 —— app 仍成立(system/apps → AppManagementPage);
object 已无专属页,由引擎通用外壳承载,配置见 builtinComponents.tsx 与
views/metadata-admin/anchors.ts 的 registerMetadataResource({ type:
'object', … }),只给列/搜索字段/建单字段/锚点,无组件覆写。全仓仅
permission(EditPage)与 datasource(ListPage)替换外壳页。
P1.16 四条 + :1001:
- listMode / MetadataTypeConfig / MetadataGrid 三个符号全仓零命中;
MetadataResourceConfig 没有任何渲染模式键,列形状只有 listColumns
(加 ListPage 整页替换)。
- "grid mode 下的表格渲染"—— 表格是真的,但不是一档模式:
ResourceListPage 对所有类型无条件渲染同一个 table,无分支可切。
- report 一条须订正卡片正文的举证:report **有** registerMetadataResource
注册(anchors.ts,基线 4e93e40 上即已存在),卡片正文"零注册"的
grep 结论有误。真实判词是:注册项里没有任何东西选择渲染模式(因为无模式
可选),它配的是对象锚点组与建单种子。
- :1001 按分诊注记逐入口分别判,且前提已部分过期:卡片正文称
sidebar / QuickActions 仍指 legacy 别名,而 objectstack-ai#3739 / PR objectstack-ai#3748 已合并 ——
两个 sidebar 的 sys-objects 与 home 的 manage-objects 现均指引擎正规路由
/apps/setup/metadata/object;hub cards 本就没有 object 卡。故三个入口
今天没有一个指向该拼法,离开的原因各不相同,如实分述。
围栏内只动这九行。节标题 **Metadata Manager Grid Mode:** 依"错误名留作
纠错锚"之例不动;:865 的 MetadataService 三个方法经核实真实存在,不在改写
之列。
Fixesobjectstack-ai#3738
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentation

Projects

None yet

2 participants

@yinlianghui@claude