Skip to content

Commit fc4168b

Browse files
committed
docs(versions): 补 PowerShell 退出码陷阱与 cargo 预存警告
批 0 收尾时 cargo test 在管道下报 exit 1,实为 PowerShell 把原生 stderr 的 warning 包成 NativeCommandError 所致;用 2>file 重定向定案真实 exit = 0(2337/0/6)。 - 陷阱 2:判定会写 stderr 的原生命令必须用 2>file 或 $LASTEXITCODE,不要用 2>&1 | - 顺带登记两条预存 cargo warning(lib.rs 多重构建目标 / db_task_index_tests 未使用 import) - 原「行数口径」节改名为「本机工具链的两个读数陷阱」
1 parent 15a4436 commit fc4168b

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

‎docs/versions/v0.22.md‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,21 @@
9898

9999
规格 §10 的批 0 还包含:**ADR-033~035**(当前 `docs/adr/` 最高为 ADR-032)· 豁免表纠偏 · 拆 4 个 >600 行文件 · 原语三层。**这些不在 0-A / 0-B 范围内**,后续子批次另行立计划。
100100

101-
### 跨批发现 · 行数红线的测量口径(工具级,影响全项目)
101+
### 跨批发现 · 本机工具链的两个「读数陷阱」(工具级,影响全项目)
102+
103+
**陷阱 1 · 行数 —— `Get-Content` 会少算**
102104

103105
本机 harness 的 `pwsh` 实为 **Windows PowerShell 5.1**(ANSI 码页 `gb2312`),`Get-Content` 会按 GBK 解码 UTF-8 文件并**吞掉换行、把行数少算**(实测:`index.ts` 19→12、`paths.test.ts` 130→112、`NoteListView.tsx` 654→609,最多少 **45** 行)。
104106
⇒ **AGENTS.md §3 的「≤300 / >600」必须以字节 `0x0A` 或 `[System.IO.File]::ReadAllLines(path, UTF8)` 计量,禁用 `Get-Content` 数行。** 该失真已造成一次真实险情(据此误判 `IconName` 未导出)。
105107
治理侧(口径未定义、15 个 >600 硬限违规、豁免表数值过期)见 [tech-debt/review-2026-09-11.md](../tech-debt/review-2026-09-11.md);工具侧见批 0-B 台账。
106108

109+
**陷阱 2 · 退出码 —— `2>&1 | …` 会把成功的原生命令报成失败**
110+
111+
`cargo`(及任何往 **stderr** 写 warning 的原生命令)在 `2>&1 | …` 或管道下,其 stderr 会被 **PowerShell 5.1 包装成 `NativeCommandError`**,使整个管道以**非零**结束 —— **即使命令本身完全成功**。
112+
实测:`cargo test 2>&1 | Select-Object -Last 40` 报 **exit 1**,而同一次运行的单元测试是 `2337 passed; 0 failed; 6 ignored`、`cargo test --doc` 亦全绿;改用 `2>file` 重定向后 **真实 `exit = 0`**。
113+
⇒ **判定这类命令的结果必须用 `2>file` 重定向,或直接读 `$LASTEXITCODE`,绝不要用 `2>&1 | …`。** 否则会把**绿的门禁误报成失败**(批 0 收尾时差点如此)。
114+
顺带记两条**预存** cargo warning(非批 0 引入):`lib.rs` 同时属于 `lib` target `app_lib` 与 `integration-test` target `app_lib_tests`(正是它触发了上述假象);`src/db_task_index_tests.rs:6` 的 `unused import: super::*`。
115+
107116
## 边界(红线延续,全文见规格 §3)
108117

109118
- 不写「自动替你决定」的能力;AI 一律默认关、可降级、须授权

0 commit comments

Comments
 (0)