CLAUDE.md@docs/reviews · git:20261007.0f63e2d · 2026-10-07 · sha256 23d850215a0db118

CLAUDE.md@docs/reviews git:20261007.0f63e2dA

Immutable. This exact content never changes and is served at /api/v1/blob/23d850215a0db118.

# docs/reviews

8 步開發迴圈**步驟 4**(兩個 reviewer 跑同一份 prompt、報告取聯集)的證據。
⚠️ **這個目錄的存在本身就是開關** —— `scripts/check-claude-md.sh --start-segment` 看到它存在,
就會要求「上一段的 commit 範圍內有新增 `docs/reviews/S<數字>*.md`」。刪掉目錄 = 退出這個慣例。

## ⚠️ 段落 ID 跨進度表會重複 —— 新進度表的報告放子目錄

**本 repo 根下的 `S6-{a,b}.md` 屬 `2026-10-05` 那張進度表**;`2026-10-07-review-followups/`
底下那組屬 lawdesk-ai `docs/designs/2026-10-07-review-followups-design.md` 的表(S4 在本 repo)。
段落 ID **從 S1 重新編號**,所以兩張表都有 S1–S6 —— 全部放根目錄就會互相覆蓋。

⚠️ **`git status` 看不出來**:覆蓋既有報告顯示的是 `M`,新增是 `??`,**差一個字母、沒有任何警告**。
2026-10-07 在 lawdesk-ai 實際覆蓋過一次(42 行的舊報告被 105 行蓋掉,`git checkout --` 救回)。

**做法**:第一張表的報告留在根目錄,之後每張表開一個 `<進度表檔名去掉 -design.md>/` 子目錄。
gate 的樣式是 `(^|/)S[0-9][^/]*\.md$`(`check-claude-md.sh` 的 `reviews_missing`),
`(^|/)` 讓子目錄下的 `…/S4-a.md` 一樣命中 —— **實跑確認過,放子目錄不會讓 gate 漏掉**。

## 格式

一段一組 `S<段落>-a.md` 與 `S<段落>-b.md`,各三節:

| 節 | 寫什麼 |
|---|---|
| **派工** | 範圍(`git diff <起點> HEAD`)、取檔方式、明寫「已跑過不要重跑」的驗證、重點指示 |
| **發現** | 每一項的級別、內容、依據(實跑 / 只讀)。**兩份獨立抓到同一項要標出來** —— 那代表不是誤判 |
| **處置** | **每一項實際怎麼處理**:採納附做了什麼 / 不採納附理由 / 轉成新段落。⚠️ 這是唯一只有自己寫得出來、也是唯一看得出「發現有沒有變成修正」的一節 |

末尾加一節**兩份報告的比較**:完全重疊的、各自獨有的。獨有項通常比重疊項更有價值 ——
它說明了單發會漏掉什麼。

## 規矩

- ⚠️ **前兩節(派工 / 發現)寫完就不改**,連事後發現 agent 講錯了也不改 ——
  **改了就不再是當時 agent 看到的東西,整份證據作廢**。行號一樣凍結在被審的那個 commit。
  要對得上現況的是 CLAUDE.md 與程式註解那幾份活文件,不是這裡。
  **更正寫在後來那一段的報告裡**(判例:2026-10-07 S4 的 reviewer 指出 `S6-a.md` A2 的
  「新增測試情境 ⑦ 釘住它」是假宣稱 —— ⑦ 本來就釘不到;`S6-a.md` 沒動,更正寫進
  `2026-10-07-review-followups/S4-a.md` 的處置與 `tests/test-gate.sh` 的註解)。
- **第 3 節「處置」必須保持正確**(它描述的是現況),也是唯一只有自己寫得出來的一節。
- 真的不需要跑步驟 4 時,建 `S<段落>-SKIP.md` 寫明理由,並在 commit 訊息加
  `SKIP-REVIEW: <段落> <理由>` 這行 trailer。
  ⚠️ **「程式碼只有一行」不是合法理由** —— review 真正抓的是**註解與文件裡的宣稱**,
  那部分機械檢查蓋不到。判準是「diff 裡有沒有引別處行號 / 函式 / UI 字串 / commit 範圍的敘述」。
- ⚠️ **`docs/reviews/CLAUDE.md`(本檔)不算報告** —— 它不是 `S` 開頭接數字,改它不會讓 gate 放行。
- ⚠️ **只「修改」既有報告也不算** —— gate 用 `--diff-filter=A`,要的是**新增**。