feat(grok): 把 #826 的 strict repo-read 共存档位落到 main - #1006
Conversation
grok 栈 `#825 → #826 → #830 → {#836,#867}` 的第二层。#825 已由 #1004 落地 (main `89a6164e`),所以这一层现在可以直接对 main 落。 **没有 force-push #826 那条共享 draft 分支**,本 PR 从我自己的分支发。 ## rebase 方式:只取它自己那两个提交 直接 `git rebase origin/main` **会冲突** —— 冲在 `436b4bdb fix: fail closed on broken Grok CommHub MCP`,那是 **#825 自己的提交**,已经以 squash 形式在 main 上了,而 #826 的历史里还带着它。 正确做法是把它自己那部分接到 main 上: git rebase --onto origin/main <#825-head> <#826-head> rc=0 它自己的两个提交: 4496835 feat(grok): add strict repo-read copresence profile 1149676 docs(tests): record restacked Grok repo-read evidence 结果 12 files changed, 284 insertions(+), 36 deletions(-)。 ## 今天这套门抓到一处 `doc-symbol-pins`:`docs/message-lifecycle.md` 把 `shouldSkipMessage` 钉在 `cli.ts#L4662`,而本层又往 `cli.ts` 加了行,真值变成 **4669**。文本和 URL 两处都改。 🔴 **这是同一条 pin 今晚第二次漂**(#1004 刚把它从 4639 改到 4662)。 往 `cli.ts` 这种热点文件钉**行号**,几乎每个碰它的 PR 都会把它顶漂 —— 改成只钉符号、不钉行号才是根治,但那是另一条改动,不在这里顺手做。 其余全绿:test-suite-registration(suites=198 registered=34 orphans=164 new=0)/ doc-source-pins / no-escaped-comments / no-memory-slugs / home-path-baseline / public-script-safety / l1-paths-sync / copresence-profile-pin。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
🔴 更正我在本 PR 正文里写的那句「根治」正文里我写:
这句是错的,撤回。 我在动手前先量了一下,结果否定了它。 那道门的 PIN 正则( PIN = re.compile(
r"\[([^\]\n]{1,120})\]\("
r"https://github\.com/sleep2agi/agent-network/blob/"
r"([0-9a-zA-Z._-]+)/([^\s)#\"']+)#L(\d+)\)"
)它要求 实测(把 ⇒ 它会「变绿」,但不是因为修好了,是因为不再被检查。 而且这道门真正判定的只有 那正确的做法是什么目前就是现在这样:保留行号,让它漂、让门抓、在同一个 PR 里改掉。 真要减少这种 churn,得改门(让它也认「文件链接 + 锚文本点名符号」这种无行号形态, 教训:我差点提交一个「让门变绿」的改动,而它变绿的机制是把被检对象移出取集。 |
## 事实
4639 → 4662 → 4669 → 4691 → 4695 → 4713 → 4725 → 4728
八个值,对应 #987 / #1004 / #1006 / #1010 / #1017 / #1007 / #1023 / #1039。
规律:**任何往 `agent-node/src/cli.ts` 第 4600 行以上插代码的 PR 都会让它漂**,
那个 PR 就要多跑一轮 CI。这是每次都付的成本,不是偶发。
## 为什么现在才能这么修
`#1024` 里我提过「改成不可变 SHA」,但**当时实测证明它不成立** ——
`check-doc-symbol-pins.py` 的正则捕获了 ref 却从没用过那个捕获组,
SHA 和 `main` 一视同仁,一律拿工作树解析。单变量 A/B 两边逐字相同。
`#1025` 让脚本认了 ref(SHA pin 用 `git show <ref>:<path>` 取那个版本判)。
**这条路是那之后才通的。** 所以本 PR 是 #1025 的下游,不是 #1024 那个被推翻的提案的重提。
## 改动
- ✅ v1.4.0;当前在 [cli.ts:4725 `shouldSkipMessage`](.../blob/main/agent-node/src/cli.ts#L4725)
+ ✅ v1.4.0;截至 [`04f37800` 的 cli.ts:4725 `shouldSkipMessage`](.../blob/04f37800/agent-node/src/cli.ts#L4725)
**「当前在」也一起改成「截至 `<sha>`」** —— 这不是措辞洁癖:
钉到某个 commit 之后,「当前」这个词就不再被那个链接支持了。
只改链接不改这句话,等于用一个更稳的 pin 去支撑一句更弱的真话。
## 验证:两个方向都见证过,而且**判定数始终是 5**
未漂时 rc=0 扫到 15 判定 5 跳过 10 漂移 0
往 cli.ts 插 3 行(过去 8 次红的场景) rc=0 扫到 15 判定 5 跳过 10 漂移 0 ← 不再红
把 pin 的行号改成 100(错的) rc=1 扫到 15 判定 5 跳过 10 漂移 1 ← 门仍然咬得动
还原 rc=0
**第三行是本 PR 最该看的**:如果这个改法让门不再对错误 pin 判红,那就是把对象移出了取集 ——
「让门变绿」而不是「把问题修好」。它没有:判定数一次都没掉,错的 pin 照样红。
`docs-site` 取集同时核过:扫到 28 / 判定 8 / 跳过 20 / 漂移 0(#1025 之后它才在取集里)。
## 一个操作上的插曲,记一下
我第一次建 worktree 时目录已存在,`git worktree add` 失败 —— **但后面的 `cd` 成功进了那个陈旧目录**,
于是我在一份完全不相干的树上跑了检查,得到 `cli.ts:836` 和 `rc=2`。
**命令失败了,后续步骤照跑。** 后来加了 `cd ... || exit` 并先打印 HEAD 核对才发现。
Co-authored-by: t <internlmorg@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
grok 栈
#825 → #826 → #830 → {#836, #867}的第二层。#825 已由 #1004 落地(main
89a6164e,#825 已关并在上面写了去向),所以这一层现在可以直接对 main 落。没有 force-push #826 那条共享 draft 分支 —— 本 PR 从我自己的分支发。
rebase 方式:只取它自己那两个提交
直接
git rebase origin/main会冲突,冲在436b4bdb fix: fail closed on broken Grok CommHub MCP—— 那是 #825 自己的提交,已经以 squash 形式在 main 上了,而 #826 的历史里还带着它。
正确做法是把它自己那部分接到 main 上:
它自己的两个提交:
结果:
12 files changed, 284 insertions(+), 36 deletions(-)。今天这套门抓到一处
doc-symbol-pins:docs/message-lifecycle.md把shouldSkipMessage钉在cli.ts#L4662,而本层又往
cli.ts加了行,真值变成 4669。文本和 URL 两处都改。🔴 这是同一条 pin 今晚第二次漂 —— #1004 刚把它从
4639改到4662,现在又要改到4669。往cli.ts这种热点文件钉行号,几乎每个碰它的 PR 都会把它顶漂。改成只钉符号、不钉行号才是根治,但那是另一条改动,不在这里顺手做。
其余门
合并之后
栈还剩
#830 → {#836, #867}。会照同样方式逐层往上落:本地
rebase --onto取它自己那部分 → 跑今天这套门 → 从我自己的分支发 PR → 不动原分支。