From 3f752eb62f065614f3fcc5360f23573db1f26c3b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Aug 2026 20:44:15 +0000 Subject: [PATCH] =?UTF-8?q?docs(agents):=20=E8=A1=A5=E4=B8=80=E6=9D=A1=20p?= =?UTF-8?q?rettier=20=E5=81=87=E7=BA=A2=E6=8A=A4=E6=A0=8F(#3682)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删掉未接线的 prettier devDependency(#3657 / PR #3681)并不能消灭假红陷阱: 容器镜像预装了全局 prettier(3.8.1),仓内解析不到时 pnpm exec 沿 PATH 兜底,依然按 prettier 默认配置对未改动内容报 exit=1。仓内现在已 grep 不到 prettier,陷阱反而更隐蔽。 在 §9「测试纪律」补一条(与相邻的 stale-install 假红条目同类),写明: 本仓没有格式化门禁、命令为什么仍跑得通、归因是「默认配置 != 本仓约定」 而非「main 没格式化」、禁止据此 --write、正确动作是什么。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt --- AGENTS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AGENTS.md b/AGENTS.md index 8df205a693..b18b880344 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -192,6 +192,7 @@ AGENTS.md 的「只跑受影响的包」指的是**用上面的路径过滤缩 - 失败现场会直接指认根因:dump 里若仍是 Suspense fallback(如 `Loading report renderer…`),就是本条;**hook 超时表现为「失败的*文件* + 0 个失败*测试*」**(其余全部 skipped),别误读成断言失败。 - 顺手体检:别把 `keysOf(x)` 这类整体计算写在 `.filter()` 谓词里(每个元素重算一遍)。`all-locales-key-parity` 曾因此 7.51s,提升出谓词后 **25ms**。 - **本地一片 parity/schema 测试失败,先怀疑 stale install**(`node_modules` 里的 `@objectstack/spec` 版本落后于 lockfile),不是回归 —— CI 每次全新安装,永远不会命中这个。 +- **别用 `prettier` 给改动做收尾检查 —— 它对未改动内容就是红的。** 本仓没有格式化门禁:没有 `.prettierrc` / `prettier.config.*` / `.prettierignore` / `.editorconfig`,没有 workflow 跑它,`eslint.config.js` 里也没有任何格式规则(全是正确性/ratchet 规则);那条从未接线的 devDependency 已随 objectui#3657 / PR #3681 删掉,仓内(排除 `pnpm-lock.yaml`)已 grep 不到 prettier。**但命令仍然跑得通** —— 容器镜像在 `/opt/node22/lib/node_modules/` 预装了一份全局 prettier(实测 3.8.1),仓内解析不到时 `pnpm exec` 会沿 PATH 兜底,任何装有全局 prettier 的机器同理。没有配置就按 prettier **默认值**(双引号、`printWidth: 80`)判定,而本仓是单引号、行宽更宽,于是**逐字节等于 `origin/main` 的文件照样报 `exit=1`**:根因是「默认配置 ≠ 本仓约定」,**不是**「`main` 没格式化」,也不是你改坏了。**禁止**据此 `--write` —— 未改动的 `scripts/check-doc-links.mjs` 单个文件就是 389 行重排(它的测试文件 1646 行),内容是 `'x'` → `"x"` 与 80 列回绕这类与你无关的 diff,会一起混进你的 PR。正确动作:忽略这份输出;本仓真接了线的检查是 `pnpm lint` / `pnpm test` 与根 `package.json` 里的 `check:*` 那几条。前情 objectui#3657、#3682。 前情:objectui#3010(一次修掉五个文件,含一个已被「超时调到 15s」糊过、满负载下依然 15021ms 超时的例子)。