systematic-debugging (obra/superpowers)
在提出修正方案前,系統性地排查缺陷、測試失敗與異常行為。
superpowers systematic-debugging:在三個小型 bug 上沒有可測量的增益,Token 用量約是未使用技能的 1.3 倍
Codex CLI · gpt-6-astra
22.4 / 30
相對未使用技能的提升:+0.00 · 視情況推薦 · 18 次執行
視情況推薦:提升幅度 +0.00 低於 +1.0。推薦條件為總分至少 22/30、產出品質至少 3.5、提升幅度至少 +1.0。
SOTA
透過使用 Codex 測試。
涵蓋 Codex, Claude Code
Codex CLI 0.166(SOTA 等級):18 次評分執行。依我們的等級規則,在這裡通過也涵蓋 Claude Code;但這不代表第二等級的結果。
分數
每個維度為 0 到 5 分,六個維度相加即為滿分 30 的總分。每個維度都是 5 分最好。成本 5 分代表便宜又快速;安裝 5 分代表容易安裝。
- 觸發可靠性
- 5.0
- 相對未使用技能的提升
- 2.0
- 產出品質
- 4.5
- Token 與時間成本
- 3.0
- 安裝與可攜性
- 4.0
- 安全性
- 4.0
安全審查
安全靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題)。掃描結果乾淨,不代表技能一定安全。
安裝
npx skills@latest add obra/superpowers --skill systematic-debugging
固定 Commit: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
測試日期: 2026-11-02
我們測了什麼
- 小型函式中的 off-by-one — movavg.py 中的 moving_average 回傳錯誤的數字:moving_average([2, 4, 6, 8, 10], 3) 應該是 [2, 3, 4, 6, 8],但後面的值算錯了。找出原因並修正。測試:python3 -m unittest。
- 跨檔案的日期 bug — 我們的週報表頭在跨年前後顯示錯誤日期,例如 header('2026-W01') 應該是 'Week 2026-W01: Dec 29 - Jan 04, 2026'。找出原因並修正。
- 相依於執行順序的測試失敗 — tests/test_settings.py 中的測試單獨執行會通過,但整個檔案一起跑時 test_b 會失敗,而且設定似乎會帶著先前呼叫的標籤。診斷並修正。
優點
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
缺點
- 相對未使用技能沒有可測量的提升(+0.00,落在雜訊範圍內)。
- 一句話提示得分 4.86,使用技能則為 4.45(-0.42)。
- 測試注意事項:一句話提示組(6 次執行)是後來才加入的,使用的機器與對照組、實驗組不同。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
在 Mac 測試機上執行 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存的 HOME/TMPDIR/快取,技能分為已安裝(實驗組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提到技能(除了下方註明的措辭)。評分以程式化方式進行(隱藏單元測試/植入問題召回率/限制條件檢查/視情況加上渲染與 OCR 檢查),每次執行 0–5 分。沒有任何分數是由 LLM 評審決定。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 4.45 | 75k |
| 一句話提示 | 4.86 | 98k |
| 使用技能 | 4.45 | 99k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 22.4 / 30,評級為 視情況推薦。
揭露事項:一句話提示組(6 次執行)是後來才加入的,使用的機器與對照組、實驗組不同。
判定:視情況而定(22.4 / 30)。 來源:obra/superpowers,skills/systematic-debugging,固定於提交 2ce8aa1。安裝:npx skills@latest add obra/superpowers --skill systematic-debugging。授權條款: MIT(儲存庫 LICENSE)。
這是什麼
來自 obra/superpowers 的 systematic-debugging 技能:「遇到任何錯誤、測試失敗或非預期行為時,在提出修正之前使用」。四個階段(調查根本原因、尋找模式、提出假設、修正)、一條禁止疊加修正的規則,以及輔助說明(根本原因追蹤、縱深防禦、基於條件的等待),加上測試壓力情境與一支 shell 指令碼(find-polluter.sh,對測試檔案進行本機二分搜尋)。
我們如何測試
在 Mac 測試機上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取,安裝技能(實驗組)、未安裝(對照組),或未安裝但將技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務每組執行 2 次,網路關閉,/tmp 寫入封鎖。提示詞從未提及技能。
- 小型函式中的差一錯誤 — movavg.py 中的
moving_average回傳錯誤的數字:moving_average([2, 4, 6, 8, 10], 3) 應該是 [2, 3, 4, 6, 8],但後面的值算錯了。找出原因並修正。測試:python3 -m unittest。 - 跨檔案日期錯誤 — 我們的週報標題在跨年期間顯示錯誤日期,例如 header('2026-W01') 應該是 'Week 2026-W01: Dec 29 - Jan 04, 2026'。找出原因並修正。
- 依賴順序的測試失敗 — tests/test_settings.py 中的測試單獨執行會通過,但整份檔案執行時
test_b會失敗,而且設定似乎會帶著先前呼叫的標籤。診斷並修正。
評分方式為程式化檢查(隱藏測試/植入問題召回/限制條件檢查/視情況進行渲染與 OCR),每次執行 0–5 分。沒有任何 LLM 評審決定分數。
結果
提供給第三組的一句話提示:「有系統地除錯:先重現失敗,在改程式碼之前調查根本原因,一次只提出一個有證據支持的假設,針對根本原因做最小的修正(不要疊加猜測),並用測試驗證。」
| 任務 | 對照組分數 | 一句話提示 | 使用技能 | 對照組 Token 數 | 一句話提示 Token 數 | 使用技能 Token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-moving-average | 4.17 | 4.58 | 4.58 | 60k | 62k | 69k | 2/2 |
| t2-weekly-dates | 4.17 | 5.0 | 4.17 | 78k | 104k | 109k | 2/2 |
| t3-shared-state | 5.0 | 5.0 | 4.58 | 85k | 127k | 118k | 2/2 |
平均分數:未使用技能 4.45,使用技能 4.45(差異 +0.0)。每次執行 Token 數:75k 對 99k(1.33 倍);時間 34 秒對 45 秒。一句話提示組:4.86(技能相較一句話提示的增益:-0.42;一句話提示相較無技能的增益:+0.42);一句話提示每次執行 98k Token,因此技能的成本是一句話提示的 1.01 倍。
實際發生了什麼
- 結果:兩組的每一次執行都通過隱藏測試,因此正確性沒有差異。
- 流程檢查「在編輯程式碼之前先執行測試」(先重現):對照組 6 次中有 4 次未做到,實驗組 6 次中也有 4 次未做到。技能的第一階段是「重現」,但使用技能的代理仍經常在執行任何東西之前就開始修補。
- 技能在 6/6 次實驗組執行中被讀取,因此觸發不是問題;它只是沒有改變處理這些小型錯誤的行為(這些錯誤光讀程式碼就能找到)。
- 成本:每次執行約 1.3 倍 Token(89k 對 67k)。
- 一句話版本(先重現、一次一個假設、最小修正、驗證):平均 4.86,對照組 4.45、技能組 4.45;每次執行 98k Token,對照組 75k(1.3 倍),技能組 99k(1.0 倍)。
- 差異在於編輯前先執行測試:6 次一句話提示執行中有 5 次這麼做,對照組 6 次中有 2 次,技能組 6 次中也有 2 次。技能沒有改變這個行為;是點明這件事的那句話改變了它。每一組在每次執行中都說明了根本原因,也通過每一項隱藏測試,程式碼差異很小。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_輸出品質 | 4.45 | 使用技能時平均分數 4.45/5(程式化檢查,見各任務 表格)。 |
| 2_相較無技能的提升 | 2.0 | 相較未使用技能的 4.45,+0.00 分(每項任務 n=2;約 1 分以下 屬於雜訊)。 |
| 3_觸發 | 5.0 | 技能檔案在 6/6 次實驗組執行中被讀取。 |
| 4_指令可攜性 | 4 | |
| 5_效率 | 3 | 1.33 倍 Token(每次執行 99k 對 75k)與 1.32 倍時間(45 秒對 34 秒)。 |
| 6_安全性與衛生 | 4 |
這項測試的限制
- 三個小型植入錯誤(差一錯誤、跨檔案日期邏輯、依賴順序的測試污染)——全都簡單到基準代理就能修正。
- 技能是為困難、需要多次嘗試的錯誤而設計;我們沒有測試那些。
find-polluter.sh並未實際演練。- 每項任務每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式評分只能衡量檢查看得到的部分;無法評判品味,也無法判斷結果是否為最佳可能。
安全性
見 security.md。掃描:CRITICAL 0 / HIGH 0 / MEDIUM 0。判定:可安全執行(網路關閉的沙箱)。乾淨的掃描結果不能證明技能安全。
總結
在三個小型錯誤上,技能增加了約 1.3 倍 Token,卻沒有可測量的改變:對照組與技能組都得到 4.45,而且都只在 6 次執行中的 2 次於編輯前先執行測試。說出「先重現」的一句話版本表現更好(4.86,6 次中有 5 次)。它在更困難的錯誤上或許能回本,而我們沒有測試那些。
完整紀錄
執行日誌:systematic-debugging (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-moving-average control-1: 得分 4.17, token 60337, 秒 30.6, 檢查 3/4, 未開啟 t1-moving-average control-2: 得分 4.17, token 60293, 秒 24.1, 檢查 3/4, 未開啟 t1-moving-average oneliner-1: 得分 4.17, token 62543, 秒 30.2, 檢查 3/4, 未開啟 t1-moving-average oneliner-2: 得分 5.0, token 62033, 秒 32.0, 檢查 4/4, 未開啟 t1-moving-average treatment-1: 得分 5.0, token 69716, 秒 31.0, 檢查 4/4, 開啟 systematic-debugging t1-moving-average treatment-2: 得分 4.17, token 69385, 秒 26.6, 檢查 3/4, 開啟 systematic-debugging t2-weekly-dates control-1: 得分 4.17, token 78575, 秒 38.8, 檢查 3/4, 未開啟 t2-weekly-dates control-2: 得分 4.17, token 78005, 秒 39.5, 檢查 3/4, 未開啟 t2-weekly-dates oneliner-1: 得分 5.0, token 96141, 秒 41.5, 檢查 4/4, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:movavg.py(t1-moving-average,第 1 次,Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out