VACANT / GAIN EXPERIMENT · INDEPENDENT VERIFICATION DOSSIER

交付屬實。
增益未證。

對 Codex 交付的 22db0d7 增益實驗包(Vacant DOWNLOAD_ALL)所做的逐項獨立驗證: 完整性、測試、量具、真模型資料、敘述與實物的一致性。 所有「通過」都是我在本機與 VM 上實際重跑的結果;沒有重跑的,逐條標明。

驗證日期 2026-08-20 驗證者 Claude(opencode) 分支 claude/fuse-gain-verified-20260820 Commits 416b973 · 5b256d7
驗證屬實
交付物:真實、可重現、可融合
增益主張:依其自訂判準,尚未成立
壹 / VERDICT

判決摘要

一句話:這個包值得收——它修的是真 bug、自我宣稱克制;但對話敘述有四項超出實際交付,且「Vacant 有增益」依 SPEC_GAIN 自己的判準仍不成立。

0
SHA-256 校驗通過 / 12 項
0
改動檔與 git 歷史逐位元相同 / 8 檔
0
融合+修正後全套測試通過
371/371
量具雙向驗證(本機重現 VM 結果)
0
敘述超出實際交付的項目
0
把仍然有效的 API key(待撤銷)
收下的理由
  • EvalPlus 官方輸入反序列化——真 bug,不修的話 canonical 會掛在自己的測試上
  • sandbox 記憶體上限、非有限浮點 wire 編碼、regex/set 等價 oracle
  • infra_void 分類:基礎設施壞掉不再被算成候選答錯
  • 評審 FAIL 必須附可執行反例,系統真的在沙箱裡跑過才計票
  • reviser 不得把已通過的答案改壞(選擇規則有測試釘住)
  • v8r 的負面結果誠實落盤——沒有只挑有利的留
不能說的話
  • 不能說「增益已證明」——v8r 的 ON 沒有提高正確交付率(0.833 對 0.833),OFF5 還缺 7 題
  • 不能說「deadline quorum/五呼叫重配/corpus 13-4-9」——不在交付物內
  • 不能說「OFF5 已不再是安全漏洞」——交付的程式碼裡它仍用裸 subprocess 跑模型碼(我已在分支上修好
  • n=6 smoke 三臂全對 6/6——題太簡單,量不到差異,只能證明機制可運作
貳 / TIMELINE

驗證時間線

從拿到包裹到落地融合的完整順序。每個節點都對應一條可複查的指令或檔案。

08-19 16:41 UTC
Codex 端重打包
舊 source ZIP 中央目錄損毀 → 從原始封存重建,bundle HEAD f72aa6e(base b4e350d),targeted pytest 在 py3.13 達 120s 硬 timeout,誠實保留 log。
08-20 00:42
包裹落地 ~/Downloads
Vacant_DOWNLOAD_ALL:bundle、SOURCE/WORKSPACE zip、evidence(patch+logs)、gain-delivery(真模型 pilot 資料)。
09:18–09:40
完整性核對
SHA256SUMS 12/12 OK;兩個 ZIP unzip -t 無 CRC 錯誤;bundle clone+fsck --full 通過;8 個改動檔與 delivery changed/ 逐位元相同。
09:40–09:55
bundle 測試
py3.13 乾淨 venv:test_gain_runner 16 passed;全套(扣掉 mcp 2.0 環境問題)550 passed/1 skipped。
09:55–10:05
量具本地重現
--arms probe --probe-sample 0,371 題:canonical 371/371 通過、壞樁 371/371 被擋。零模型呼叫。
10:05–10:08
API 與 VM 探測
兩把對話中貼出的 key 各發一次最小 probe——HTTP 200,仍然有效。VM(100.87.54.102)ssh 可連:Ubuntu 6.8/py3.12.3/2C3.8G。
10:08
融合
開分支 claude/fuse-gain-verified-20260820;本機 HEAD 的展件工作與 patch 八檔零重疊,git apply 乾淨套上;全套 562 passed → commit 416b973
10:13–10:27
首次完整三臂 smoke
n=6、calibration 3、三模型家族。run_complete=trueequal_budget_comparison_valid=true——runner 歷史上第一次。總成本約 $0.58。
10:20–10:46
修 OFF5 沙箱缺口
checks.py 新增 run_python_capture,OFF5 行為簽名改走受限 worker;新增 3 個釘住測試;全套 565 passed → commit 5b256d7。VM Linux 重點檔 64 passed/1 skipped。
10:46–
紀錄落盤
ops/gain/VERIFICATION_2026-08-20.md、smoke summary 進版控;原始 JSONL 留磁碟(鐵律 3)。金鑰掃描:repo 零殘留。
參 / INTEGRITY

交付完整性

信任之前先驗貨。四道手續全部通過;最關鍵的是第 4 道——交付敘述中的八個改動檔,與 git 歷史裡的內容逐位元相同,沒有「history 一套、交貨一套」。

12/12
shasum -c SHA256SUMS.txt 全數 OK
2/2
ZIP CRC:unzip -t 無錯誤
fsck
bundle 完整歷史,僅正常 dangling commits
8/8
changed/ ↔ f72aa6e 位元一致
HASH CHAIN · 證物錨定
圖 1。 交付包的信任鏈:b4e350d(既有歷史)→ f72aa6e(bundle HEAD)→ 八個改動檔(位元一致)→ 本機 416b973(融合)→ 5b256d7(OFF5 修正+smoke)。
12 項 SHA-256 逐條列出(全部實測 OK)
檔案SHA-256結果
附帶驗證:本機既有的 EvalPlus 官方包 MbppPlus-v0.2.0.jsonl.gz,其 SHA-256 與 codebench.py 釘死值 af43697e… 一致——題庫本體也沒有被動過。
肆 / TESTS

測試證據

三個環境、五輪實跑。交付自述「targeted pytest 在 py3.13 達 120s 硬 timeout」——我這邊同檔 6 秒跑完;無從考證原因,但測試本身是真過的

TEST RUNS · 五輪
圖 2。 綠=通過、灰=跳過、紅=失敗(全程為 0)。mcp 一輪的失敗是環境問題(mcp 2.0 移除 mcp.server.fastmcp 匯入路徑),非改動回歸;本 repo 舊版 mcp 下全過。
環境Python範圍結果耗時
bundle clone(乾淨 venv)3.13.1test_gain_runner.py16 passed5.95s
bundle clone3.13.1全套(--ignore mcp)550 passed, 1 skipped424s
本 repo 融合後3.12.10全套(含 mcp)562 passed552s
+ OFF5 修正3.12.10全套565 passed576s
VM Linux(100.87.54.102)3.12.3gain+checks+evalplus64 passed, 1 skipped5.13s

跳過的 1 項=EvalPlus 官方包整合門(官方包只在本機與既有 VM 環境),屬預期行為。

伍 / INSTRUMENT

量具 371/371——先答已知答案

SPEC_GAIN §5.2:量具必須先在已知答案上兩個方向都判對,「量到 0」才不等於「線沒接上」。交付宣稱 VM 上 371/371;我在本機用零模型呼叫獨立重現了同一個數字

371/371
canonical 參考解全數通過 hidden_check
371/371
確定壞樁全數被擋
0
模型呼叫(純本地沙箱驗證)
7
resource-exclusion(釘死且有測試)
378 TASKS · MBPP+ v0.2.0
圖 3。 378 題中的 371 題(綠)進入實驗池;7 題(紅)連 canonical 都無法在產品宣告的 10 秒/128 MiB 沙箱內跑完 base+plus,固定排除——這是服務容量邊界,不是把候選的錯洗掉。
7 題排除清單與理由(pinned in GAIN_EVALPLUS_RESOURCE_EXCLUSIONS)
Task ID排除理由
Mbpp/255combinations_with_replacement 輸出爆炸
Mbpp/271巨大整數冪的極端線性迭代
Mbpp/392O(n) 建表超出沙箱 envelope
Mbpp/599上看 1 億次 Python 層加法
Mbpp/603二次方 list-removal 篩法
Mbpp/630指數級座標物化
Mbpp/644極端 list 物化超出記憶體 envelope
這一步同時驗證了:MBPP+ 官方輸入反序列化修正(JSON 會丟 tuple/set/complex,官方 loader 有 task-specific 還原表,舊版沒做 → canonical 掛在自己的測試上)、sandbox 記憶體上限(RLIMIT_DATA+Linux 加 RLIMIT_AS)、非有限浮點 wire 編碼(nan/inf 不再讓 literal_eval 爆掉)。都是真的。
陸 / MECHANISM

三臂機制——等預算是誠實的分水嶺

ON 比 OFF 好幾乎必然(多花五倍呼叫)。要答的是:等預算下,Vacant 打不打得贏最土的 self-consistency。以下是交付版 runner 的實際結構(與程式碼逐行核對過)。

圖 4。 三臂呼叫結構。ON 的五次呼叫:產生 ×1+評審 ×3+修訂 ×1。評審的 FAIL 只有在反例被沙箱實際執行確認後才計票;修訂版若改壞已通過的初稿會被丟棄(記 stayed)。稽核是確定性抽樣(sha256 < 20%),信譽只吃真的抽樣結果。
評審流程(REVIEWER_SYSTEM)
VERDICT: PASS | FAIL        ← 第一行,malformed 不計票
CONCERN: <一個問題 | none>
TEST_ARGS: <python literal list>   ← FAIL 必填
EXPECTED: <python literal>

系統對 FAIL 的反例做三道關卡:ast.literal_eval 解析(永不執行評審文字)→ 公開 input contract 域內檢查(域外指控不算反例)→ 受限 worker 實際執行。三關都過才算「機器確認的反例」。

防改壞的選擇規則
# 第五次呼叫存在,但不得頂掉已過審的答案
if passed_review and initial_visible_ok:
    code = initial_code          # 評審過了,reviser 只是記錄
elif revised_visible_ok:
    code = revised_code          # 真的修好了才換
elif initial_visible_ok:
    code = initial_code          # 改壞了,退回初稿

transition 逐題記成 improved/harmed/stayed_*——「為了顯示有修復而換答案」這條路被測試封死(test_unfounded_fail_reviews_cannot_trigger_rewritetest_majority_approved_initial_cannot_be_harmed_by_fifth_call)。

柒 / EVIDENCE

真模型證據——三輪,三種命運

交付附了兩輪真跑(一輪不完整、一輪中止),我補了第三輪——runner 歷史上第一次完整三臂。數字全部與落盤的 JSONL 逐項核對一致。

12
題(MBPP+,seed gain-grounded-v8)
3
模型家族:deepseek/gemini-2.5-flash/gpt-4o-mini
OFF5 缺 7 題
credits 不足 → 等預算比較無效
增益 0
ON 修復錯答 0 件、正確交付率未升
圖 5。 v8r:正確交付率 ON=OFF=0.833;ON 的接受精度較高(0.909 vs 0.833,少漏 1 件)——依 SPEC_GAIN §4 自己的判準,這只能說「比較可依賴」,不能說「產出變好」。交付文件也是這樣寫的,與鐵律 5 一致。
評審本身的準確率(單獨報,不藏總數裡)
grounded reviewer accuracy0.806
raw reviewer accuracy0.667
FAIL 指控14
機器確認的反例1
確認反例對 hidden truth 的精度0.0

14 個指控只有 1 個能被執行確認,而那 1 個指的還不是真錯——「純文字批評不計票」在真實資料上證明是必要的。

延遲與成本(落盤值)
OFF 呼叫 p507.1s(max 18.2s)
ON review p50 / max2.1s / 28.1s
OFF5 max126.8s(長尾)
ON 成本(market)$0.0969
OFF 成本(market)$0.0125
ON / OFF 成本比7.8×
ABORTED.json(逐字):「operator stopped after repeated 240-second reviewer endpoint timeouts…」OFF 12/12 全對;ON 完成 8/12 後中止;OFF5 未開始。equal_budget_comparison_valid=false,部分臂比例明確標示不得用於比較。
圖 6。 中止點視覺化。這輪暴露的產品問題:同步等齊 reviewer 會被最慢模型的尾延遲支配——這正是「deadline quorum」被列為下一步的原因(它也確實還沒做,見第捌節)。
true
run_complete——歷史首次
true
equal_budget_comparison_valid——歷史首次
6
題 × 3 臂;calibration 3 題(spread 0.333)
$0.58
總成本(calibration $0.108 在內)
圖 7。 smoke:三臂正確交付皆 6/6。題目對 glm-5.2/deepseek-v4-flash/kimi-k3 太簡單,量不到差異——此輪只證明機制端到端可運作,對增益一個字都不能說。
閘門實測有效

ON 臂 18 張評審票中出現 2 個 FAIL 指控,機器確認 0 個 → 全部正確忽略,沒有觸發不必要的修訂;6 題 transition 全為 stayed_correctharmed 為 0。可執行反例這道閘門在真實端點上擋下了幻覺指控。

ON 臂延遲(90s timeout × 2 retries)
gen p50 / max8.2s / 65.3s
review p50 / max11.7s / 65.9s
revise p5010.0s
failed attempts(重試後成功)2
捌 / GAPS

敘述落差——四項宣稱不在交付物內

對話最後那篇「最終交付已完成」描述的是另一個更大的 v2 包(當時下載全數失敗)。實際能下載、能驗證的是 22db0d7 這個較小的包。以下四項在交付物中不存在——引用舊敘述時不可當成已經有。

未交付

1 · Deadline quorum

敘述:「兩個反例搜尋者可並行,各有 logical deadline;依可驗證結果形成 quorum,不無限等最慢模型」

程式裡沒有。reviewer 仍是 ThreadPoolExecutor.map 同步等全部回來——clinepass-clean-v2 就是這樣被 240s 尾延遲拖到中止的。交付自己的 SUMMARY.md 也老實把它列為「下一步」。

未交付

2 · 五呼叫重新配置(generator+2 反例搜尋者+裁決者+reviser)

敘述:「五次呼叫重新配置:generator + 兩個反例搜尋者 + 反例裁決者 + independent reviser」

目前 ON 臂是 generator+3 reviewer+reviser=5 呼叫,沒有獨立的反例裁決者角色。反例的「裁決」是確定性規則(可解析、域內、執行確認),不是另一個模型呼叫。

未交付

3 · Corpus 13/4/9 命名修正與 canonical aliases

敘述:「Curated 13 題、Calibration 4 題、Holdout 9 題……新增不帶數字的 canonical aliases,逐位元相同」

交付物內無 corpus manifest、無此拆分、無 aliases。題庫就是 EvalPlus 371 題子集按 seed 的 sha256 排序取前 n,calibration 用 offset 保證不重疊。

已補修

4 ·「OFF5 不再是安全漏洞」——交付時不成立,我已修好

敘述:「OFF5 的行為指紋與投票現在使用和 ON 相同的受限 worker」

交付的 behavior_signature() 實際上用 subprocess.run([sys.executable, …]) 直接執行模型產生的程式:沒有 RLIMIT、沒有 import 白名單、沒有 env 清理。這是交付敘述與程式碼之間最嚴重的一處落差。修正內容見第玖節。

判斷:四項落差都屬於「敘述超前於交付」,而非資料造假——實際交付的部分全部核對屬實。但若只看對話紀錄做決策,會以為 deadline quorum 與 corpus 拆分已經存在;這份卷宗的作用之一就是防止那個誤會。
玖 / FIX

OFF5 缺口與修正

修正策略:不新開一條執行路徑,而是把「觀察行為」這個需求接回同一條受限 worker 路徑。checks.py 新增 run_python_capture——與 run_python_check 共用沙箱本體,差別只在把 runner 的 stdout 帶出來。

圖 8。 左:交付版——模型碼在裸 subprocess 裡跑,只有 wall timeout,沒有資源上限與 import 白名單;候選的 stdout 還能直接印偽造的簽名標記。右:修正後——候選碼只活在 worker,經 literal-only RPC 被呼叫,stdout 去 DEVNULL;簽名只能由 runner 裡的探針印出。
釘住行為的新測試(3 個)
  • test_behavior_signature_runs_candidate_in_restricted_worker:非白名單 import → 簽名降級 EXEC_FAIL;候選印偽造標記不影響簽名
  • test_behavior_signature_infra_failure_is_infra_void:沙箱起不來記 infra_void,不當候選的錯
  • test_run_python_capture_returns_probe_stdout_and_keeps_candidate_sandboxed:只帶回探針輸出
等價性守住:同義實作仍同票(test_off5_votes_on_behavior_not_source_text 原測試不動照過);import 白名單與 ON 臂的 hidden 判定共用同一份常數,兩條路徑不會在不同規則下跑。
核心差異(節錄)
- run = subprocess.run([sys.executable, path],
-     capture_output=True, text=True, timeout=timeout_s)
+ out = run_python_capture(
+     code, probe, timeout=timeout_s,
+     allowed_imports=_GAIN_ALLOWED_IMPORTS,
+     allowed_entry_points=(entry_point,))
# 候選碼:worker 限定、RLIMIT、白名單 import、env 清理
# 候選 stdout:DEVNULL,無法偽造 __VACANT_BEHAVIOR__ 標記
拾 / COST

成本分析——等呼叫 ≠ 等成本

「等預算」目前以呼叫數定義(ON 5 次、OFF5 5 次)。但 smoke 的落盤成本顯示:同為 5 呼叫/題,ON 的市價是 OFF5 的 1.8 倍——review 與 revise 的 prompt 更長、模型更貴。正式跑的預算平衡要改用 market cost,否則「等預算」會再次名實不符(E19 踩過一次,這是第二次警訊)。

圖 9。 smoke 三臂:每題呼叫(上,皆為整數保證)與實際美元成本(下)。OFF $0.0388/ON $0.2814/OFF5 $0.1564。v8r 同方向:ON market $0.0969 vs OFF $0.0125=7.8×。
呼叫/題成本(smoke)成本/正確交付v8r 成本(market)
OFF1$0.0388$0.0065$0.0125
ON5$0.2814$0.0469$0.0969
OFF55$0.1564$0.0261$0.0562(不完整)
拾壹 / SECURITY

安全警示

兩把 API key 仍然有效。對話中貼出的 sk_…89ece8sk_…996a8d,我在 2026-08-20 各發了一次最小 probe——皆 HTTP 200 並完成真實生成。前一份交付已建議撤銷,至今日未執行。

請立即到 Cline 後台撤銷並重發。在此之前,任何拿到對話紀錄的人都能用這兩把key 計費呼叫。本 repo、驗證紀錄、smoke logs 均已掃描,零金鑰殘留;probe 回應與臨時 key 檔已刪除。
我做的
  • 金鑰只存在 /tmp(權限 600),用完即刪
  • repo 全樹(含 untracked)掃描 sk_f1c0…sk_ab08…:零命中
  • runner 的 calls.jsonl 本身不含 key(只記 prompt/response 全文)
  • VM 上沒有放任何金鑰(與前一手同一紀律)
你要做的
  • 撤銷兩把 key 並重發——這是唯一能把暴露歸零的動作
  • 新 key 走 ~/.cline-keysCLINE_KEYS 路徑,不進對話、不進版控
  • 正式批跑前,把預算上限與 market-cost 平衡一起定下來(見第拾節)
拾貳 / CLOSING

結論與重現

卷終

這個交付包是真的、可重現、值得收的:它把增益實驗從「口號」變成「有判準、有閘門、有落盤」的機器。它沒有證明增益——而它最大的貢獻之一,就是把「為什麼還不能說有增益」變得可操作、可檢查。

項目位置
融合分支claude/fuse-gain-verified-20260820
融合 commit416b973
OFF5 修正+smoke5b256d7
文字版卷宗ops/gain/VERIFICATION_2026-08-20.md
本網站ops/gain/VERIFICATION_2026-08-20.html
smoke 機器可讀結果runs/g_smoke_20260820/summary.json
smoke 原始全 I/O(未進版控)runs/g_smoke_20260820/*.jsonl
重現指令
# 1. 量具驗證(零模型呼叫、免費)
python3 ops/gain/gain_run.py \
  --out /tmp/probe371 --n 371 --seed vm-canonical-371 \
  --arms probe --probe-sample 0

# 2. 全套測試
.venv/bin/python -m pytest tests/ -q   # → 565 passed

# 3. 真跑(需要有效 key;先撤銷舊key再發新的)
CLINE_KEYS=~/.cline-keys python3 ops/gain/gain_run.py \
  --out runs/g1 --n 12 --seed <new-seed> --calibration-n 6 \
  --models cline-pass/glm-5.2,cline-pass/deepseek-v4-flash,cline-pass/kimi-k3

# 等預算結論只在以下兩者皆 true 時可讀:
#   summary.json → run_complete
#   summary.json → equal_budget_comparison_valid
下一步建議(依缺口排序):① 撤 key;② 預算平衡改 market cost;③ reviewer deadline quorum(clinepass-clean-v2 的死因);④ 題目篩選加難——smoke 三臂全對代表題目對現今模型太簡單,量不到差異。