Skip to content

Commit 5963de5

Browse files
ritimclaude
andcommitted
feat(detector): findings 輸出格式紀律(evidence 裸 token + severity enum)
真實盲測照出:agent 常把 evidence 寫成帶敘述的字串("trace_path: 乘積…")或用 非 enum 的 severity("MAJOR"),導致計分時被靜默判為證據不完整/定級未達。 在 detector.md 與 security-fraud-detector.md 的證據標註步驟加入「輸出格式紀律」: evidence 只填裸 token(trace_path/logic_invariant/state_mutation/guard_absence, 不得加冒號或敘述,理由寫進 rationale);severity 只能是 info|low|medium|high|critical。 附正確/錯誤範例。配合 validate_findings.py 的 fail-closed 驗證形成根因+執行雙層防線。 驗證:修正後重跑盲測,agent 產出乾淨 token,candidate evidence_complete 0→1.0、 severity_hit 0→1.0。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 96b0a9f commit 5963de5

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

plugins/debug-hunter/agents/detector.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ correctness 類升 confirmed 的客觀錨點是**前兩項、缺一不可**:
9696

9797
> correctness 漏洞的「傷害」是**數字真的算錯了**——必須同時指出 (a) 違反哪條 INV、(b) 錯成什麼具體數值。只說「用 double 可能有誤差」而不展示偏差值=證據不完整。
9898
99+
> **輸出格式紀律(嚴格,會被 validator fail-closed 擋下)**:findings JSON 的 `evidence` 只填**裸 token**
100+
> ——`trace_path` / `logic_invariant` / `state_mutation` / `guard_absence` 其一,**不得**加冒號、敘述、
101+
> 行號(理由一律寫進 `rationale`)。`severity` 只能是 `info|low|medium|high|critical`**不可**
102+
> `MAJOR`/`P0`/大寫 `CRITICAL` 等非 enum 值)。
103+
> ✅ 正確:`"severity": "medium", "evidence": ["logic_invariant", "state_mutation"]`
104+
> ❌ 錯誤:`"severity": "MAJOR", "evidence": ["state_mutation: 0.11050≠0.11 …"]`
105+
99106
### Step 2:SKILL.md 檢查清單
100107
... (rest of the content)
101108

plugins/debug-hunter/agents/security-fraud-detector.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ security 類升 confirmed 的客觀錨點是**前兩項、缺一不可**:
6767

6868
> 安全漏洞的「傷害」是**攻擊者能讓系統替他動帳**——IDOR/越權 finding 至少要同時給出 (a) 污染路徑、(b) 違反哪條歸屬/餘額不變量。只說「沒看到 owner check」而不標 trace_path+invariant=證據不完整。
6969
70+
> **輸出格式紀律(嚴格,會被 validator fail-closed 擋下)**:findings JSON 的 `evidence` 只填**裸 token**
71+
> `trace_path`/`logic_invariant`/`state_mutation`/`guard_absence` 其一,不得加冒號或敘述,理由寫進
72+
> `rationale`);`severity` 只能是 `info|low|medium|high|critical`(不可用 `P0`/`MAJOR`/大寫等非 enum 值)。
73+
> `"severity":"high","evidence":["trace_path","logic_invariant","guard_absence"]` ❌ `"severity":"P0"`
74+
7075
### 步驟
7176
1. **定位所有 Sink**:credit/debit/setBalance/settle/withdraw/transfer/ledger.post/動態 SQL/狀態躍遷
7277
2. **反向資料流**:對每個 sink 的金額參數與身分參數,往回追到來源

0 commit comments

Comments
 (0)