攻擊方 diff 過濾 + 預設檔名更名

- 攻擊方審查的 diff 在取得階段就排除 . 開頭資料夾內所有內容、
  以及排除事項檔與前次審查紀錄檔本身(git pathspec)
- 預設檔名更名:.codereview.md → exclusions.md、
  .codereview-known-issues.md → known-issues.md
- SKILL.md / paladin.md / archive-findings / README 同步更新

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-06-15 18:20:30 +08:00
co-authored by Claude Opus 4.8
parent a09faf9a1b
commit 1908eba681
4 changed files with 34 additions and 21 deletions
+4 -4
View File
@@ -23,7 +23,7 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除
`--known-issues <前次審查紀錄路徑>` `--exclusions <排除事項檔案路徑>`**兩者皆必填,一定要指定**
- **未提供任一路徑 → 必須先向使用者取得,不可自行採用預設或臆測**(與 code-review 一致:預設檔名僅作詢問時的建議選項)。
建議預設:已知問題 `.codereview-known-issues.md`、排除事項 `.codereview.md`(與 code-review 防守方讀的同一檔)。
建議預設:已知問題 `known-issues.md`、排除事項 `exclusions.md`(與 code-review 防守方讀的同一檔)。
- **檔案本身允許不存在或為空內容**:若目標檔不存在、或內容為空(含只有空白)→ skill 先**依模板建立該檔**(見下方「模板」),再附加條目;既有非空檔則直接附加。
- 寫入屬於**更動專案檔案**的行為 → **未獲使用者同意前不可寫入**;拒絕則只輸出將寫入的預覽。
- **格式依副檔名自動決定**`.md` → Markdown(用下方模板);`.json` → top-level JSON array(空/不存在時初始化為 `[]`)。
@@ -74,7 +74,7 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除
目標檔不存在時先建立標題:
- 已知問題檔:`# 前次審查紀錄(已知問題)\n\n由 /jsc:archive-findings 從 code-review【✅ 成立】問題彙整;/jsc:code-review 防守方會讀此檔並標「🔁 已知問題」。`
- 排除事項檔(`.codereview.md`):`# Code Review 排除事項\n\n已知技術債/團隊慣例/刻意取捨/已確認的誤判;/jsc:code-review 防守方會讀此檔並標「🚫 略過」。`
- 排除事項檔(`exclusions.md`):`# Code Review 排除事項\n\n已知技術債/團隊慣例/刻意取捨/已確認的誤判;/jsc:code-review 防守方會讀此檔並標「🚫 略過」。`
**已知問題** 每筆:
@@ -164,6 +164,6 @@ argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除
| 助理 | 呼叫 |
| --- | --- |
| Claude Code / Antigravity | `/jsc:archive-findings --known-issues .codereview-known-issues.md --exclusions .codereview.md`(或省略路徑由它反問) |
| Claude Code / Antigravity | `/jsc:archive-findings --known-issues known-issues.md --exclusions exclusions.md`(或省略路徑由它反問) |
| Codex | `$archive-findings --known-issues docs/known-issues.md --exclusions docs/review-rules.md`,或用 `/skills` 選單 |
| OpenCode | 描述需求(如「把剛剛 code-review 成立的問題存到 .codereview-known-issues.md、誤判存到 .codereview.md」)自動觸發 |
| OpenCode | 描述需求(如「把剛剛 code-review 成立的問題存到 known-issues.md、誤判存到 exclusions.md」)自動觸發 |
+19 -6
View File
@@ -32,8 +32,20 @@ description: 以 RPG 攻防對決方式審查 git diff 的程式碼審查 skill
`/jsc:code-review main feature/login`。指令為 `git diff <target>...<source>`(比對 source 自分岔點以來的變更)。
- **若來源或目標分支任一缺漏 → 必須詢問使用者補齊**,兩個都拿到才繼續;
可用 `git branch` 列出可選分支輔助使用者選擇。不可自行臆測或預設某一分支。
- 取得兩個分支後執行 `git diff <target>...<source>`
- **diff 為空**(兩分支無差異)→ 回報「無變更可審查」並結束
- 取得兩個分支後執行 `git diff <target>...<source>`,並**排除下列不納入審查的路徑**
- **任何以 `.` 開頭的資料夾內的所有內容**(如 `.git/``.github/``.claude-plugin/``.codex-plugin/``.agents/` 等)
- **排除事項檔**與**前次審查紀錄檔**本身(`--exclusions` / `--known-issues` 指定的路徑;未指定時連同預設檔名 `exclusions.md``known-issues.md` 一併排除)。
- 用 git pathspec 一次完成,例如:
```bash
git diff <target>...<source> -- . \
':(exclude,glob)**/.*/**' \
':(exclude)<排除事項檔路徑>' \
':(exclude)<前次審查紀錄檔路徑>'
```
`**/.*/**` 排除任意層級的 `.` 開頭資料夾內容;`.` 開頭的**檔案**不在此列,只有上述兩個設定檔被指名排除。)
- **過濾後 diff 為空** → 回報「無變更可審查」並結束。
### 2. 選擇角色
@@ -52,14 +64,14 @@ slash 參數格式:`/jsc:code-review <target> <source> [角色...] [--exclusio
防守方需要兩份參照資料,兩者皆位於**專案根目錄**:
**(a) 排除事項設定檔**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨):
**(a) 排除事項設定檔**(建議檔名 `exclusions.md`,列出已知技術債/團隊慣例/刻意取捨):
- **若 slash 參數帶了 `--exclusions <路徑>`** → 即為使用者明確指定,直接採用該路徑,**不需再問**。
- **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview.md` 僅作為詢問時的**建議選項**
- **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `exclusions.md` 僅作為詢問時的**建議選項**
**不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。
- **檔案允許不存在或為空** → 視為「無排除事項」,**不**因缺檔而中斷。
**(b) 前次審查紀錄檔**(已知問題=前次審查成立但未解決的問題;建議檔名 `.codereview-known-issues.md`):
**(b) 前次審查紀錄檔**(已知問題=前次審查成立但未解決的問題;建議檔名 `known-issues.md`):
- **若 slash 參數帶了 `--known-issues <路徑>`** → 即為使用者明確指定,直接採用該路徑,**不需再問**。
- **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**(規則同上,預設檔名僅為建議選項,不可自行假設)。
@@ -78,6 +90,7 @@ slash 參數格式:`/jsc:code-review <target> <source> [角色...] [--exclusio
- **等級**:🔴 嚴重 / 🟠 高 / 🟡 中 / 🔵 低。
- **檔案位置 / 所在行數**:取自 diff 新檔(`+` 側)的路徑與行號。
- 只針對本次 diff 的變更,不對無關舊碼開砲。
- 攻擊方審查的是**步驟 1 過濾後**的 diff(已排除 `.` 開頭資料夾內容、排除事項檔與前次審查紀錄檔),不得把這些被排除的路徑列入問題。
### 5. 防守方裁決(若選到防守方)
@@ -137,6 +150,6 @@ slash 參數格式:`/jsc:code-review <target> <source> [角色...] [--exclusio
| 助理 | 呼叫 |
| --- | --- |
| Claude Code / Antigravity | `/jsc:code-review`(反問分支與角色),或 `/jsc:code-review main feature/login mage``/jsc:code-review main feature/login all --exclusions .codereview.md --known-issues .codereview-known-issues.md` |
| Claude Code / Antigravity | `/jsc:code-review`(反問分支與角色),或 `/jsc:code-review main feature/login mage`、`/jsc:code-review main feature/login all --exclusions exclusions.md --known-issues known-issues.md` |
| Codex | `$code-review main feature/login attack`,或 `$code-review main feature/login all --exclusions docs/review-rules.md --known-issues docs/known-issues.md`,或用 `/skills` 選單 |
| OpenCode | 描述需求(如「用攻防角色 review main 與 feature/login 的差異,排除事項看 docs/review-rules.md、已知問題看 docs/known-issues.md」)自動觸發 |
+4 -4
View File
@@ -20,19 +20,19 @@ personality: 沉穩公正、就事論事,不護短也不冤枉,只依排除
## 排除事項(裁決前先確認)
排除事項設定檔位於**專案根目錄**(建議檔名 `.codereview.md`,列出已知技術債/團隊慣例/刻意取捨)。
排除事項設定檔位於**專案根目錄**(建議檔名 `exclusions.md`,列出已知技術債/團隊慣例/刻意取捨)。
1. **若 slash 參數帶了 `--exclusions <路徑>`** → 即為使用者明確指定,直接採用該路徑。
2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview.md` 僅是詢問時的**建議選項**
2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `exclusions.md` 僅是詢問時的**建議選項**
**不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。
3. **檔案允許不存在或為空** → 視為「無排除事項」,不因缺檔而中斷。
## 前次審查紀錄(已知問題=前次發現但未解決的問題,裁決前先確認)
前次審查紀錄檔位於**專案根目錄**(建議檔名 `.codereview-known-issues.md`,記錄歷次審查成立但尚未解決的問題)。
前次審查紀錄檔位於**專案根目錄**(建議檔名 `known-issues.md`,記錄歷次審查成立但尚未解決的問題)。
1. **若 slash 參數帶了 `--known-issues <路徑>`** → 即為使用者明確指定,直接採用該路徑。
2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `.codereview-known-issues.md` 僅是詢問時的**建議選項**
2. **否則只要使用者沒有明確告知檔案路徑 → 一律先詢問**。預設檔名 `known-issues.md` 僅是詢問時的**建議選項**
**不可**在未取得使用者明確指定前自行假設或直接採用該預設路徑。
3. **檔案允許不存在或為空** → 視為「無已知問題」(例如首次審查),不因缺檔而中斷。