Repository navigation
docs: 把一次推送代理复盘的坑落进书里(新建 3 条 + 补例 11 处) - #106
Merged
Merged
Conversation
三条都来自一次真实的推送代理复盘,外部证据独立可核: - 05 外部命令的配置面:我只审传进去的参数,没审那个进程自己会读的 配置、钩子、hooksPath。硬证据是 GitHub Copilot CLI 的 GHSA-9ccr-r5hg-74gf(CVE-2026-45033,core.fsmonitor),以及 git 2.45.1 那五个 CVE 里的三个。 - 07 文档不是防护:把限制写清楚不等于守住限制;我发明的自查命令测的 是我自己的心智模型。锚在 NIST SP 800-53A(控制清单与控制评估是两 份文件)。 - 04 预览与执行不同源:remote get-url 读 url、git push 用 pushurl, 同一个 origin 解析出两个地址,签过名的收据说了假话。Checkmarx 的 Lies-in-the-Loop 是同一落点的攻击面。 顺带修一处既有漂移:docs/intro.md 中英两版还写着「全书 66 条」,而 check-counts.js 没登记这两处,闸门查不出来——正是新条目里写的「两个 检查互相遮住」。已修正并补登记。 闸门:check:counts / check:mirror / check:mirror-deep / cspell 全过, 两 locale 两实例 build 通过(含死链检查)。vale 与 autocorrect 本机 未安装,靠 CI 卡;已按 styles/AIWiki/Cliches.yml 的词表逐条自查。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
同一次推送代理复盘里剩下的坑,根因都已被现有条目覆盖,按「根因相同 就合并」补进去,不新开条目: - happy-path-only:外部权威语料 8/8 满分,只因那八行零行触及那条分支; 补到 17 行后 9/17,八条失败全是理由名不符契约 - tests-as-verification-loop:测试和修复同一次提交=你从没见过红 - trust-then-verify:宣布「编译通过」的命令覆盖面小于改动面 (不编译测试代码、不编译特性开关后面的分支) - subagent-no-boundaries:共享的不只是文件,是 HEAD 和 index - premature-abstraction:重构 1043 → 1050,抽象让它更长了;要报行数 - confidently-wrong-explanations:危险的是「真于生态、假于本仓」, 还会洗进记忆自我传播 - comment-doc-drift:按性质切 PR 时模块级文档不属于任何一片 - hooks-not-prompts:子串匹配两头都不准;hook 读的是命令执行前的快照 - destructive-irreversible-actions:删上游分支后下游 PR 不能重开也 不能改基线;标签与注册表写入只能往前 - cicd-permission-blindspot:自动合并只等 required,而 required 可能 是空集;证明发布路径的是 provenance 不是绿灯 - log-injection-audit-integrity:给人照抄的命令也是输出面,且是「改 得更好用」的那次改动把它变成一步到位 闸门:check:counts / check:mirror / check:mirror-deep / cspell 全过, 两 locale 两实例 build 通过。vale 与 autocorrect 本机未安装,靠 CI 卡; 已按 styles/AIWiki/Cliches.yml 词表逐条自查。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
把一次真实的推送代理(push broker)复盘里踩到的坑梳理一遍,按「根因相同就合并、根因独有才新开」的规矩落进书里。
新建 3 条
每条都有独立于本项目的外部硬证据,不是一面之词。
05/shelling-out-inherits-config外部命令的配置面
hooksPathcore.fsmonitor,修于 1.0.43)+ git 2.45.1 那五个 CVE 里的三个07/documented-limits-not-defenses文档不是防护
04/preview-and-execution-diverge预览与执行不同源
remote get-url读url、git push用pushurl,同一个origin解析出两个地址,签过名的收据说了假话最有分量的一条外部证据:一个真实的编码 agent(Copilot CLI)栽在了第一条上,而它的修法(用
GIT_CONFIG_COUNT钉住safe.bareRepository=explicit)正是条目里给出的做法。三条都已挂进
docs/mechanisms.mdx(工具与权限外溢 / 目标函数错位 / 局部视野不足),中英镜像齐。补例 11 处(不新开条目)
根因已被现有条目覆盖的,一律补进去,只给具体例子和判据:
06/happy-path-only— 外部权威语料 8/8 满分,只因那八行零行触及那条分支;补到 17 行后 9/17,八条失败全是理由名不符契约06/tests-as-verification-loop— 测试和修复出现在同一次提交里,等于你从没见过红06/trust-then-verify— 我用来宣布「编译通过」的命令,覆盖面比我的改动小(不编译测试代码、不编译特性开关后面的分支)00/subagent-no-boundaries— 共享的不只是文件,是 HEAD 和 index03/premature-abstraction— 一次「消除重复」的重构:1043 → 1050,抽象让它更长了;判据是报行数01/confidently-wrong-explanations— 危险的错误是「真于生态、假于本仓」那种,而且会洗进笔记自我传播05/comment-doc-drift— 按性质切 PR 时,模块级文档不属于任何一片,于是没有 owner00/hooks-not-prompts— 子串匹配的 hook 两头都不准;hook 读到的是命令执行前的快照00/destructive-irreversible-actions— 删上游分支后下游 PR 不能重开也不能改基线;标签与注册表写入只能往前07/cicd-permission-blindspot— 自动合并只等 required 的检查,而 required 可能是空集;证明发布路径的是 provenance,不是绿灯07/log-injection-audit-integrity— 给人「照抄就能跑」的命令也是输出面,而且正是把它改得更好用的那次改动让注入变成一步到位顺手修一个既有 bug
docs/intro.md中英两版还写着「全书 66 条」(实际 82),而scripts/check-counts.js没登记这两处,所以闸门一直报「通过」。这正是本 PR 新写的那句「两个只查自己想到的东西的检查会互相遮住」的现成例子。已修正,并把这两处补进
CLAIMS(现在查 7 处)。明确不入书的 9 条
macOS bash 3.2 heredoc 撇号、SSRF 无放行开关、spike 分支被外部规范引用不可删、外部 PR 撞 sec 编号、crates.io API 不带 User-Agent 静默返回空、PyPI 名字折叠、macos-13 runner 退役、npm 令牌类型、某个用例在 macOS 本地挂死。
理由:特定仓库或特定环境的运维知识,不是「用 AI 编码的通用误区」,进书会稀释密度且很快过时。
测试计划
本地已跑通:
npm run check:counts— 7 处手写计数全部与实际(82)一致npm run check:mirror— 157 对中英配对完整npm run check:mirror-deep—##数 / admonition 序列 / 内链目标集 结构对等npx cspell— 0 issue(.cspell.json新增 14 个技术词)npm run build— 两 locale 两实例构建通过,含onBrokenLinks: throw死链校验vale/autocorrect— 本机未安装,靠本 PR 的 CI 判定。已按styles/AIWiki/Cliches.yml的词表逐条 grep 自查,套话零命中,但那是手工核对,不等于闸门通过按
CLAUDE.md,新增条目类改动合并前需先确认——CI 绿了也先不自行合并。🤖 Generated with Claude Code