Archived
- 攻擊方審查的 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>
170 lines
8.4 KiB
Markdown
170 lines
8.4 KiB
Markdown
---
|
||
name: archive-findings
|
||
description: 將 /jsc:code-review 已裁決的問題保存到目標專案 —【✅ 成立】附加到「前次審查紀錄(已知問題)」檔、【❌ 誤判】附加到「排除事項」檔,讓 code-review 防守方下次自動標為 🔁 已知問題 / 🚫 略過。當使用者說保存/歸檔 code review 結果、把成立問題寫進已知問題、把誤判寫進排除事項、把 review 裁決落地到專案時觸發。只處理「已裁決」的列表(合併防守方裁決表與攻擊方問題表),不自己跑 review、不修改程式碼。缺裁決表時,請先用 /jsc:code-review 的防守方(paladin)產生裁決。
|
||
argument-hint: "--known-issues <前次審查紀錄路徑> --exclusions <排除事項檔案路徑>"
|
||
---
|
||
|
||
# archive-findings — 保存 code-review 裁決結果到專案
|
||
|
||
把 `/jsc:code-review` 防守方的裁決落地成兩份專案紀錄,形成下次審查的回饋圈:
|
||
|
||
| 裁決 | 動作 |
|
||
| --- | --- |
|
||
| ✅ 成立 | 附加到**前次審查紀錄(已知問題)檔** → 下次審查會被標 **🔁 已知問題** |
|
||
| ❌ 誤判 | 附加到**排除事項檔** → 下次審查會被標 **🚫 略過** |
|
||
| 🔁 已知問題 | 已在已知問題檔,**不重複寫入**(僅計數) |
|
||
| 🚫 略過 | 已在排除事項檔,**不重複寫入**(僅計數) |
|
||
|
||
> 與 `/jsc:code-review` 的關係:code-review 的步驟 7 只會(在同意後)把 ✅ 成立 寫入已知問題檔;
|
||
> **誤判 → 排除事項** 它不會寫。本 skill 一次補齊兩個方向,且**只吃既有裁決結果**:不跑 review、不改程式碼。
|
||
|
||
## 參數(與 code-review 同名旗標,方便沿用同一組路徑)
|
||
|
||
`--known-issues <前次審查紀錄路徑>` `--exclusions <排除事項檔案路徑>` — **兩者皆必填,一定要指定**。
|
||
|
||
- **未提供任一路徑 → 必須先向使用者取得,不可自行採用預設或臆測**(與 code-review 一致:預設檔名僅作詢問時的建議選項)。
|
||
建議預設:已知問題 `known-issues.md`、排除事項 `exclusions.md`(與 code-review 防守方讀的同一檔)。
|
||
- **檔案本身允許不存在或為空內容**:若目標檔不存在、或內容為空(含只有空白)→ skill 先**依模板建立該檔**(見下方「模板」),再附加條目;既有非空檔則直接附加。
|
||
- 寫入屬於**更動專案檔案**的行為 → **未獲使用者同意前不可寫入**;拒絕則只輸出將寫入的預覽。
|
||
- **格式依副檔名自動決定**:`.md` → Markdown(用下方模板);`.json` → top-level JSON array(空/不存在時初始化為 `[]`)。
|
||
|
||
## 執行流程
|
||
|
||
### 1. 取得問題表與裁決表(只吃既有結果)
|
||
|
||
來源優先序:本次對話中上一個 `/jsc:code-review` 的輸出;若無,請使用者貼上。
|
||
|
||
- **問題表**(攻擊方):`問題 | 等級 | 描述 | 建議 | 檔案位置 | 所在行數`。
|
||
- **裁決表**(防守方):`來源角色 | 原問題 | 裁決 | 理由 | 最終建議`,裁決 ∈ `🚫 略過 / 🔁 已知問題 / ❌ 誤判 / ✅ 成立`。
|
||
- **沒有裁決表** → 無法分類,**請先跑防守方**(`/jsc:code-review <target> <source> paladin`)或請使用者提供裁決表。
|
||
**只處理已裁決的列表**,不自行臆測成立或誤判。
|
||
|
||
### 2. 合併兩表
|
||
|
||
以 **`原問題` ↔ `問題`** 為鍵配對;同名問題以 **`來源角色` + `檔案位置`** 區分。
|
||
合併後每筆 = 等級/描述/建議/檔案位置/所在行數(問題表)+ 裁決/理由/最終建議(裁決表)。
|
||
|
||
- **對不上的列**(裁決表有但問題表查無,或反之)→ 列出請使用者確認,**不臆測**、不寫入。
|
||
|
||
### 3. 補齊欄位
|
||
|
||
- **日期**:`YYYY-MM-DD`(可用 `date +%F`,或取來源分支最後 commit 日期)。
|
||
- **範圍/來源**:`<target>...<source>`(沿用本次 review 的分支;不確定就問或留白)。
|
||
|
||
### 4. 取得同意 → 去重 → 附加
|
||
|
||
1. 先輸出「將寫入」的預覽(各檔幾筆、條目摘要),**請使用者確認**後才動檔。
|
||
2. **去重鍵**:`<檔案位置>|<問題標題>`。寫入前先讀目標檔,**已存在相同鍵的條目 → 略過不重複附加**。
|
||
3. **目標檔不存在或為空(含只有空白)→ 先依「模板」建立**(`.md` 用下方模板;`.json` 初始化為 `[]`),再附加。
|
||
4. 分流:
|
||
- **✅ 成立** → 附加到**已知問題檔**(`--known-issues`)。
|
||
- **❌ 誤判** → 附加到**排除事項檔**(`--exclusions`)。
|
||
- **🔁 已知問題 / 🚫 略過** → 不處理(已存在),僅計數。
|
||
|
||
### 5. 回報摘要
|
||
|
||
列出:新增成立 N 筆、新增誤判 M 筆、已知問題(略過)K 筆、排除(略過)L 筆、重複而跳過 J 筆,以及實際寫入的檔案路徑。
|
||
|
||
---
|
||
|
||
## 檔案格式
|
||
|
||
### Markdown(`.md`)
|
||
|
||
目標檔不存在時先建立標題:
|
||
|
||
- 已知問題檔:`# 前次審查紀錄(已知問題)\n\n由 /jsc:archive-findings 從 code-review【✅ 成立】問題彙整;/jsc:code-review 防守方會讀此檔並標「🔁 已知問題」。`
|
||
- 排除事項檔(`exclusions.md`):`# Code Review 排除事項\n\n已知技術債/團隊慣例/刻意取捨/已確認的誤判;/jsc:code-review 防守方會讀此檔並標「🚫 略過」。`
|
||
|
||
**已知問題** 每筆:
|
||
|
||
```markdown
|
||
### [<等級>] <問題標題>
|
||
<!-- key: <檔案位置>|<問題標題> -->
|
||
- 檔案:`<檔案位置>:<所在行數>`
|
||
- 描述:<描述>
|
||
- 建議:<最終建議>
|
||
- 裁決:✅ 成立(<理由>)— 由 <來源角色> 提出
|
||
- 範圍:`<target>...<source>`,<日期>
|
||
```
|
||
|
||
**排除事項** 每筆:
|
||
|
||
```markdown
|
||
### <問題標題>
|
||
<!-- key: <檔案位置>|<問題標題> -->
|
||
- 檔案:`<檔案位置>`
|
||
- 排除原因(❌ 誤判):<裁決理由>
|
||
- 範圍:`<target>...<source>`,<日期>
|
||
```
|
||
|
||
### JSON(`.json`)
|
||
|
||
維持 **top-level array**(不要包在物件裡);每筆一個物件,以 `key` 去重:
|
||
|
||
```json
|
||
{
|
||
"key": "<檔案位置>|<問題標題>",
|
||
"title": "<問題標題>",
|
||
"severity": "🔴 嚴重 | 🟠 高 | 🟡 中 | 🔵 低",
|
||
"file": "<檔案位置>",
|
||
"line": "<所在行數>",
|
||
"description": "<描述>",
|
||
"suggestion": "<最終建議>",
|
||
"verdict": "成立 | 誤判",
|
||
"reason": "<理由>",
|
||
"source": "<target>...<source>",
|
||
"date": "YYYY-MM-DD"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 模板(空檔/新檔的初始內容)
|
||
|
||
目標檔不存在或為空時,先寫入下列模板(同一份也隨附於本 skill 的 `templates/`),再於對應標題下附加條目。
|
||
|
||
### 已知問題檔(`--known-issues`,`.md`)
|
||
|
||
```markdown
|
||
# 前次審查紀錄(已知問題 / Known Issues)
|
||
|
||
> 本檔由 `/jsc:archive-findings` 自動維護,記錄 `/jsc:code-review` 防守方裁定 **✅ 成立** 但尚未解決的問題。
|
||
> `/jsc:code-review` 防守方在步驟 3(b) 會讀此檔:若新發現與此處條目相符,標為 **🔁 已知問題(前次未解決)**,不重複裁決。
|
||
> 問題修復後請刪除對應條目。每筆以 `<!-- key: 檔案位置|問題標題 -->` 去重。
|
||
|
||
## 待解決問題
|
||
|
||
<!-- archive-findings 由此往下追加條目;條目格式見 /jsc:archive-findings 說明。 -->
|
||
```
|
||
|
||
### 排除事項檔(`--exclusions`,`.md`)
|
||
|
||
```markdown
|
||
# Code Review 排除事項(Exclusions)
|
||
|
||
> 本檔由 `/jsc:archive-findings` 維護(也可手動編輯),列出已知技術債/團隊慣例/刻意取捨/已確認的誤判。
|
||
> `/jsc:code-review` 防守方在步驟 3(a) 會讀此檔:若新發現命中此處條目,標為 **🚫 略過(排除事項)**,不再裁決。
|
||
> 不再適用時請手動移除。每筆以 `<!-- key: 檔案位置|問題標題 -->` 去重。
|
||
|
||
## 排除項目
|
||
|
||
<!-- archive-findings 由此往下追加條目;條目格式見 /jsc:archive-findings 說明。 -->
|
||
```
|
||
|
||
### JSON(`.json`)
|
||
|
||
空/不存在時初始化為空陣列,再 append 物件:`[]`
|
||
|
||
---
|
||
|
||
## 呼叫方式
|
||
|
||
格式:`--known-issues <路徑> --exclusions <路徑>` — **兩者必填**;未提供會反問取得。需先有 `/jsc:code-review` 的問題表+裁決表。
|
||
|
||
| 助理 | 呼叫 |
|
||
| --- | --- |
|
||
| 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 成立的問題存到 known-issues.md、誤判存到 exclusions.md」)自動觸發 |
|