Skip to content

docs(skills): console-development.md 顶部注记的搬家归因改成 04-21→04-23 的 commit 链,cccdf84d7 降为其中一步 (#3737) - #3856

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3737-guide-attribution
Aug 8, 2026
Merged

docs(skills): console-development.md 顶部注记的搬家归因改成 04-21→04-23 的 commit 链,cccdf84d7 降为其中一步 (#3737)#3856
yinlianghui merged 1 commit into
mainfrom
claude/issue-3737-guide-attribution

Conversation

@yinlianghui

@yinlianghui yinlianghui commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

Fixes #3737

问题

skills/objectui/guides/console-development.md 顶部引用块(:10 起)把「shell / layouts / home pages / navigation / 整个 metadata admin 迁入 @object-ui/app-shell」整包记在 commit cccdf84d7 名下,:82 那行又复述一遍「all of it left apps/console in cccdf84d7」。照这个坐标去 git show 会拿到一个不含目标符号的 diff,白费一次查证 —— 而这句归因已经被 #3730 / #3713 两张卡的正文继承,是个会被反复引用的错坐标。

复核(动笔前跑,基线 origin/main @ c32323e1e4e5d7c72adda03dce0b46ecbe079403)

卡片的两条时间线仍然成立:

28ffe4033 EARLIER-THAN cccdf84d7      # git merge-base --is-ancestor
cccdf84d7 EARLIER-THAN b279d80d6

逐符号 --diff-filter=A / =D 实测(13 个符号,无一在 cccdf84d7):

批次 app-shell 副本加入 apps/console 副本删除 cccdf84d7(04-22)次序
AdapterProvider / MetadataProvider / ExpressionProvider c1e105793(04-21) 28ffe4033(04-22) 早于
NavigationContext / FavoritesProvider / UnifiedSidebar / ConsoleLayout / console/home/* / 七个 hooks b279d80d6(04-23) b279d80d6(04-23) 晚一天

另外量到 cccdf84d7apps/console到底删了什么 —— 16 个文件:四个 designer 页(CreateAppPage EditAppPage DashboardDesignPage PageDesignPage)、五个 pages/system/ 页、五个测试、两个 view-config 工具。shell / layout / navigation / home / hooks / providers 一个都不在里面,这就是「照注记 git show 会空手」的机械原因。

两处与卡片正文的细微出入(结论不变,已按实测写入注记):useObjectActionsuseRecentItems 的 app-shell 副本其实早在 c1e105793(04-21)就落地,只有 console 副本等到 b279d80d6 才删;卡片把七个 hooks 一律归给 b279d80d6

改法

只改两处,cccdf84d7 这个名字保留作纠错锚:

  1. 顶部注记(:10) —— 把「Commit cccdf84d7 moved …」这半句拆成两段:第一段只陈述今天的归属(哪些东西现在住在 app-shell / plugin-designer),第二段以「Don't credit that move to one commit.」开头,明写「早先版本把整包记在 cccdf84d7 名下,跟着它走会落进一个不含目标符号的 diff」,再用两条 bullet 给出 04-21 → 04-23 的真实链,并点出 b279d80d6 的标题是「feat: Add ReportView and SearchResultsPage components」—— 一个字都没提这批符号,这正是照注记追溯的人绝不会往那儿找的原因。末尾给一条自查命令,让读者查具体符号而不是信任任何单 commit 归因。
  2. :82 那行 —— 「all of it left apps/console in cccdf84d7」改为「spread across the 2026-04-21 → 04-23 app-shell extraction chain, not cccdf84d7 alone」,指回顶部注记。

保留锚而不是删名字,是为了让照旧坐标搜索(grep cccdf84d)的人落在订正上,而不是搜不到、再去别处重建一遍错误。

边界(严格按卡片)

验证

附带订正一处我自己写错的前提:本 PR 正文起初写「md-only 改动 CI 的 paths-ignore 本不会触发」—— 那是照 AGENTS.md:206 写的,而 #3523 step 2 已经把 pull_requestpaths-ignore 删掉(只留在 push),本 PR 起了 16 个 check 就是活体反证。该陈旧断言在 AGENTS.md:206scripts/check-changeset-presence.mjs:33-40.github/workflows/changeset-guard.yml:3-8 三处都在,已按纪律另立 #3857(finding,未认领),本 PR 不碰。

… 链,cccdf84d7 降为其中一步 (#3737)

顶部引用块把「shell / layouts / home pages / navigation / 整个 metadata admin 迁入
@object-ui/app-shell」整包记在 commit cccdf84 名下,:82 那行又复述一遍「all of it
left apps/console in cccdf84」。按注记去 git show 会拿到一个不含目标符号的 diff ——
cccdf84 在 apps/console 下只删了 16 个文件:四个 designer 页、五个 pages/system/
页、五个测试与两个 view-config 工具,shell / layout / navigation / home / hooks /
providers 一个都不在里面。

实测的真实形态是一条跨三天的链(c1e1057 04-21 → 28ffe40 04-22 → cccdf84 04-22
→ b279d80 04-23),cccdf84d7 只是其中一步:

- providers(AdapterProvider / MetadataProvider / ExpressionProvider):app-shell 副本
  在 c1e1057(04-21)加入,apps/console 副本在 28ffe40(04-22)删除 —— 两者都是
  cccdf84 的祖先。
- navigation / layout / home / hooks(NavigationContext、FavoritesProvider、
  UnifiedSidebar、ConsoleLayout、console/home/*、七个 hooks):apps/console 副本在
  b279d80(04-23)删除,比 cccdf84 晚一天,而那个 commit 的标题是「feat: Add
  ReportView and SearchResultsPage components」,一个字都没提这批符号 —— 想顺着注记
  追溯的人绝不会往那儿找,这也是本次订正把标题原样写进注记的原因。

改法保留 cccdf84 这个名字作纠错锚(不删),明写「早先版本把整包记在它名下」,让照
旧坐标搜索的人落在订正上而不是空手。两处 hooks 细节顺手写准:useObjectActions 与
useRecentItems 的 app-shell 副本其实早在 c1e1057 就落地,只有 console 副本等到
b279d80 才删,与卡片正文把七个 hooks 一律归给 b279d80 略有出入,结论不变。

边界:注记里 metadata admin 与 designer 两半未逐条复核,按 #3737 卡片边界不动 ——
本次只是把「单一 commit」这个错坐标撤掉,没有替它们另指一个 commit;#3730/PR #3734
已修的三处表/节同样未碰。ROADMAP.md:857/871 与 AppContent.tsx:110 对 cccdf84 的引用
经核实是正确用法(PermissionManagementPage 等确实在该 commit 删除),不在改动面内。

复核命令:
  git merge-base --is-ancestor 28ffe40 cccdf84
  git merge-base --is-ancestor cccdf84 b279d80
  git log --diff-filter=A --format='%h %ad %s' --date=short -- <app-shell 路径>

Co-authored-by: Claude <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 8, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 8, 2026 9:55pm

Request Review

Copy link
Copy Markdown
Collaborator Author

✅ 验收(PM,session session_01GTRjn8xBqp75dk7kFupVRt)

实物核验:origin/claude/issue-3737-guide-attribution29309d668,base 即最新 main(c32323e1e),单提交 1 文件 +33/−7,只动授权两处;trailer 自查 0 命中;与在飞 #3749/#3738/#3849/#3546s6 零相交。
CI 终态:16 检查全部 completed —— 14 success + 2 skipped(按设计),含 Type Check、Lint、四 shard、双链路 docs link check、Control Byte Scan 全绿。

裁定要点:

转 ready 并挂 auto-merge。#3857(三处 agent-facing 文本仍宣称 md-only 不起 workflow,#3523 之后已失实,本 PR 16 检查即活体反证)已立 finding 归分诊席;dev 附带记录的「metadata-admin 半句原归因同样不成立但已随错误钉撤除、无残留缺陷」结论采纳,不另立单。


Generated by Claude Code

@yinlianghui
yinlianghui marked this pull request as ready for review August 8, 2026 22:00
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 8, 2026
Merged via the queue into main with commit 6422aa8 Aug 8, 2026
17 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3737-guide-attribution branch August 8, 2026 22:00
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Aug 10, 2026
…ai#3735) (objectstack-ai#3864)

`skills/objectui/**` 的指南是本仓 agent 写代码的直接输入,正文大量用反引号给出
仓内路径当坐标,而此前无任何门禁校验它们存在。`check-doc-links.mjs` 两头都不沾:
它的 SCAN_ROOTS 没有 skills 一行,而且它判的是 markdown 链接,反引号里的裸路径
本来也不在它眼里。代价付过两轮,两轮都靠人肉阅读发现 —— objectstack-ai#3713/PR objectstack-ai#3729objectstack-ai#3730/PR objectstack-ai#3734(同一文件 13 个真实符号指向不存在的目录)。

这类缺陷贵得不成比例:符号通常是真的,只有坐标错了,所以没人拿到编译错误 ——
agent 从 Read 拿到「文件不存在」,以为是自己搜得笨,再花一整圈重新定位指南声称已
经替它定位好的东西。它还天然复发:app-shell 抽取那批 commit 搬走代码时,没有任何
东西提醒指南跟着改。

## 门禁

`scripts/check-skills-paths.mjs` —— 读 `skills/` 下每个 markdown,把正文反引号
span 里以五个顶层目录(apps/ packages/ examples/ scripts/ content/)开头、不含空格
的 token 逐个 existsSync。三条排除都是**规则**而不是豁免,因为它们都不是「某文件
存在」这个断言:

- span 里含空白 —— 散文、命令行或类型,不是路径(PR objectstack-ai#3856 新加的自查命令行正好
  是这个形状,凭此一条就出局,不需要任何名单条目);
- 含 glob 元字符或占位段 —— 是形状不是位置,对它 existsSync 无意义;
- 围栏代码块 —— 示例可以合法地写出读者「即将创建」的文件。

main@6422aa891 实测:18 个指南文件、91 个候选 span、其中 5 个是 pattern,86 条
路径断言里 85 条落地。

## 豁免与它为什么不会烂掉

`scripts/skills-path-baseline.json` 只收「指南刻意声明其不存在」的路径,今天恰好
一条:console-development.md 的 Key contexts 一节存在的意义就是纠正那个反复出现的
错猜,原话是根本没有 `apps/console/src/context/` 这个目录。该条目是**双向**红的
棘轮 —— 路径哪天真出现在磁盘上,门禁红并点名(那句话已经变成假的);扫描不再命中
该条目,门禁也红(散文被改写了,条目成了死重)。条目按「文件 + token」定位,刻意
不含行号:指南散文一直在动(PR objectstack-ai#3856 刚搬过这一段),行号定位会在每次无关编辑后
陈旧。

反向验证(方向先判后跑,五个方向全部与预判一致):真实 skills 面绿(85/86 + 1
豁免);fixture 种死路径红并点名 file:line — token;豁免条目满足则绿;豁免路径出现
在磁盘上则红;豁免不再被命中则红。另有空判定护栏:扫到 0 个文件或 0 条断言即红 ——
「什么都没查到」不能算干净。

## 接线

按同族三个门禁(control-bytes.yml、docs-links.yml、changeset-guard.yml)的挂法:
独立 workflow、无任何 paths 过滤、订阅 merge_group、`pnpm check:skills-paths`。
本门禁扫描面全是 markdown,而 ci.yml 的 push 触发器把 `'**/*.md'` 列进
paths-ignore、GitHub 又没有 per-job 路径过滤,放进 ci.yml 等于重建它要堵的洞
(objectstack-ai#3448 的原话)。ci-cd-pipeline.md 的 workflow 清单在两个方向上都被钉住,所以
新 workflow 连带一节文档与一行清单。

扫描面刻意不含 `content/docs/**`:扩面自带一批要清的红,check-doc-links 学过三遍
(objectstack-ai#3479/objectstack-ai#3490/objectstack-ai#3545),先量红再单独落地。五前缀名单同理 —— 补上本仓另外五个顶层
目录实测为 +2 候选、0 新红,便宜,但仍然是一个刻意的决定。

无 changeset:同族三个门禁脚本(check-control-bytes、check-i18n-call-site-keys、
check-changeset-presence)落地时都没带,且本改动不碰任何发版包 src/。

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants