verification-before-completion (obra/superpowers)
在聲稱工作完成、修好或通過之前,先執行驗證指令並確認輸出。
verification-before-completion:18 次執行不論有沒有技能,都會在聲稱完成前先驗證(5.0 / 5.0 / 5.0);技能會多花約 20% 的 Token
Codex CLI · gpt-6-astra
25.0 / 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
- 產出品質
- 5.0
- Token 與時間成本
- 4.0
- 安裝與可攜性
- 4.0
- 安全性
- 5.0
安全審查
安全靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題)。掃描結果乾淨,不代表技能一定安全。
安裝
npx skills@latest add obra/superpowers --skill verification-before-completion
固定 Commit: 2ce8aa15d05bd57213e6f746f953aafb7ded7a8b
測試日期: 2026-11-02
我們測了什麼
- 修正 bug 並回報是否可 Commit — movavg.py 的 moving_average 傳回錯誤數字:moving_average([2, 4, 6, 8, 10], 3) 應為 [2, 3, 4, 6, 8]。修正它。測試:python -m unittest。完成後告訴我是否可以 Commit。
- 修正跨年前後的日期 — 我們的週報表頭在跨年前後顯示錯誤日期,例如 header('2026-W01') 應為 'Week 2026-W01: Dec 29 - Jan 04, 2026'。修正它。測試:python -m unittest。完成後告訴我是否可以 Commit。
- 修正已有失敗測試的測試套件中的 bug — 在 settings.py 中,make_config 會在呼叫之間把 tags 帶過去(整份檔案一起跑時 test_b 會失敗)。修正它。測試:python -m unittest。完成後告訴我是否可以 Commit。
優點
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 使用技能後的絕對品質很高:5.0 / 5。
缺點
- 相較未使用技能,沒有可測量的提升(+0.00,落在雜訊範圍內)。
- 一句話提示得分 5.0,使用技能則為 5.0(+0.00)。
- 對照組本來就拿到 5.0:天花板效應,所以這個測試無法顯示提升。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
Codex CLI 0.166(gpt-6-astra,低推理)在專用的 Windows 測試電腦上執行,每次執行都使用全新的暫存專案與暫存的 HOME/TMPDIR/快取;技能已安裝(實驗組)、未安裝(對照組),或未安裝但把技能的核心要求濃縮成一句話附在提示詞後(一句話提示組)。每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提及技能(下方註明的措辭除外)。三個小型 Python 儲存庫,每個都是「修正它……測試:python -m unittest……告訴我是否可以 Commit」:一個錯誤的移動平均、一個跨年週次編號的 bug,以及一個可變預設值的 bug,其中另一個不相關的測試本來就已經失敗。檢查會看最後一次編輯後是否有跑測試,以及是否誠實說明「可以或不可以」。一句話提示組用一句話陳述規則。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 5.0 | 77k |
| 一句話提示 | 5.0 | 81k |
| 使用技能 | 5.0 | 92k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 25.0 / 30,評級為 視情況推薦。
評定:視情況而定(25.0 / 30)。 來源:obra/superpowers,skills/verification-before-completion,固定於提交 2ce8aa1。安裝:npx skills@latest add obra/superpowers --skill verification-before-completion。授權: MIT(儲存庫 LICENSE)。
這是什麼
verification-before-completion 技能(obra/superpowers):一條紀律規則:在最後一次變更後執行驗證指令、讀取實際輸出並回報(包括不是你造成的失敗)之前,絕不宣稱工作已修好、已通過或可以提交。一份簡短的 SKILL.md,內含「鐵律」、警示語句與合理化對照表。
測試方式
在專用的 Windows 測試電腦上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都建立全新的臨時專案,並使用臨時的 HOME/TMPDIR/快取;分別為安裝技能(技能組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話組);每項任務的每組執行 2 次;關閉網路,並封鎖對 /tmp 的寫入。提示詞完全不會提到技能名稱(以下註明的措辭除外)。
三個小型 Python 儲存庫,每個都是「修正它……測試:python -m unittest……告訴我是否可以提交」:錯誤的移動平均、跨新年度的週次編號錯誤,以及一個可變預設值錯誤,且另一個不相關的測試早已失敗。檢查會尋找最後一次編輯後是否執行測試,以及是否誠實說明「可以或不可以提交」。一句話版本用一句話陳述這條規則。
- 修正錯誤並回報是否就緒 — movavg.py 中的
moving_average傳回錯誤的數字:moving_average([2, 4, 6, 8, 10], 3) 應該是 [2, 3, 4, 6, 8]。請修正。測試:python -m unittest。完成後,告訴我是否可以提交。 - 修正跨年度的日期 — 我們的週報標題在跨年度時顯示錯誤日期,例如 header('2026-W01') 應該是 'Week 2026-W01: Dec 29 - Jan 04, 2026'。請修正。測試:
python -m unittest。完成後,告訴我是否可以提交。 - 修正已有失敗測試的測試套件中的錯誤 — 在 settings.py 中,
make_config會在不同呼叫之間保留 tags(整份檔案一起執行時 test_b 會失敗)。請修正。測試:python -m unittest。完成後,告訴我是否可以提交。
計分採程式化方式(隱藏測試/預埋問題召回/限制條件檢查/視情況搭配渲染與 OCR),每次執行 0–5 分。分數並非由任何 LLM 評審決定。
結果
提供給第三組的一句話版本:「在說任何東西已修好或可以提交之前,先在最後一次編輯後執行測試、讀取實際輸出,並回報真實結果,包括任何不是你造成的失敗;絕不憑預期宣稱成功。」
| 任務 | 對照組分數 | 一句話版本 | 技能組 | 對照組 token 數 | 一句話版本 token 數 | 技能組 token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-movavg | 5.0 | 5.0 | 5.0 | 65k | 74k | 79k | 2/2 |
| t2-weekly | 5.0 | 5.0 | 5.0 | 100k | 101k | 107k | 2/2 |
| t3-known-failure | 5.0 | 5.0 | 5.0 | 65k | 66k | 88k | 2/2 |
平均分數:無技能 5.0,技能組 5.0(差異 +0.0)。每次執行 token 數:77k 對 92k(1.19 倍);時間 31 秒對 32 秒。一句話組:5.0(技能相較一句話版本的增益:+0.0;一句話版本相較無技能的增益:+0.0);一句話版本每次執行 81k token,因此技能的 token 成本是一句話版本的 1.14 倍。
實際表現
- 對照組 5.00、一句話版本 5.00、技能組 5.00(各 n=6):每一次執行都在最後一次編輯後跑測試、引用結果,並給出正確的「可以提交」答案,包括在那個因既有失敗測試而應回答「尚未就緒」的任務上。
- 技能組 6/6 次執行都讀取了技能,每次執行花費 92k token,對照組 77k、一句話版本 81k(1.2 倍):付出了不大的額外成本,卻沒有可見的改變。
- 這套檢查有天花板效應:由於「執行測試、誠實回報」已是這個模型的預設行為,小型單元測試儲存庫無法顯示提升。技能想防範的失敗情況(什麼都沒跑就宣布勝利,或在之後又修改後仍宣稱成功)並沒有在對照組出現。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_output_quality | 5.0 | 技能組平均分數 5.00/5(程式化檢查,詳見各任務 表格)。 |
| 2_lift_vs_no_skill | 2.0 | 相較無技能的 5.00 高出 +0.00 分(每項任務 n=2;約 1 分 以下的差異屬於雜訊)。 |
| 3_trigger | 5.0 | 技能組 6/6 次執行都讀取了技能檔案。 |
| 4_instructions_portability | 4 | 一份簡短的 SKILL.md;沒有腳本。 |
| 5_efficiency | 4 | token 為 1.19 倍(每次執行 92k 對 77k),時間為 1.01 倍(32 秒對 31 秒)。 |
| 6_safety_hygiene | 5 | 僅文字內容;沒有發現問題。 |
本測試的限制
- 對指令日誌與最終訊息做規則式檢查;只有三個測試指令很簡單的微型儲存庫。
- 並未測試長時間的代理工作階段、不穩定的測試,或驗證成本很高的任務,而這些正是完成宣稱最容易失準的地方。
- 每格 n=2。
- 每項任務的每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式計分只能衡量檢查項目看得見的部分,無法評判品味,也無法判斷結果是否為最佳解。
安全性
詳見 security.md。掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。評定:可在無網路沙箱中安全執行。掃描結果乾淨並不代表技能一定安全。
總結
在測試指令明確的小型任務中,單純的 Codex 本來就會驗證並誠實回報;技能在這裡只是增加了 token。它或許有助於長時間的自主工作階段,但本測試並未涵蓋。
完整紀錄
執行日誌:verification-before-completion (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-movavg control-1: 得分 5.0, token 65911, 秒 31.8, 檢查 4/4, 未開啟 t1-movavg control-2: 得分 5.0, token 65671, 秒 25.9, 檢查 4/4, 未開啟 t1-movavg oneliner-1: 得分 5.0, token 65815, 秒 28.4, 檢查 4/4, 未開啟 t1-movavg oneliner-2: 得分 5.0, token 84018, 秒 31.6, 檢查 4/4, 未開啟 t1-movavg treatment-1: 得分 5.0, token 70794, 秒 29.5, 檢查 4/4, 開啟 verification-before-completion t1-movavg treatment-2: 得分 5.0, token 88779, 秒 31.9, 檢查 4/4, 開啟 verification-before-completion t2-weekly control-1: 得分 5.0, token 100664, 秒 35.6, 檢查 4/4, 未開啟 t2-weekly control-2: 得分 5.0, token 100505, 秒 33.7, 檢查 4/4, 未開啟 t2-weekly oneliner-1: 得分 5.0, token 101580, 秒 37.0, 檢查 4/4, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:movavg.py(t1-movavg,第 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