Problem
regression gate 會對真實的 regression 回報 exit 0。 這是 fail-open ——gate 在該擋的
時候說通過,比任何 log 顯示問題嚴重一個量級。
發現於 #132 (#117 )的 verify:security lens 找到 NaN 路徑,Devil's Advocate 隨後證明
NaN 只是其中一條 ,且 security 建議的修法無效。
路徑一:非有限數(security lens 實測)
json.load 接受 NaN / Infinity / 1e999。
golden = NaN → diff = actual - golden = NaN
NaN > tol → False → 「✓ 通過 」
measured 0.99 對 golden 0.10,gate 印出 ✓ all corpora within tolerance 並 exit 0 。
DA 實測否決了「三行就能修」的說法 :json.load(parse_constant=...) 不能 關閉這個
class——{"golden": "NaN"} 作為 JSON 字串 根本不觸發 parse_constant,而後續的
float("NaN") / float("1e999") 仍然產生 nan / inf。
路徑二:tolerance 從不被渲染(DA 發現,更難察覺)
pass 行印的是 golden / measured / diff,但不印 tolerance ——閾值只在失敗 行出現。
也就是說:稽核一個「通過」時,唯一能揭穿它的數字恰好被隱藏。
tolerance: 1e308 (或在 diff 裡夾帶一個看似無害的 0.02 → 0.9)
→ ✓ jfk [en] wer: golden 0.0500 → measured 0.9900 (+0.9400) ← 與真正通過無法區分
→ exit 0
此值通過所有現有防線:Swift schema test 的 tolerance > 0、JSONSerialization、
parse_constant、math.isfinite()。
Type
bug
Expected
gate 對「真實 regression」不得 exit 0。至少需要:
數值健全性 :golden / tolerance / error_rate 必須是有限數且落在合理範圍
(math.isfinite() + 上界;注意字串形式的 "NaN" 也要擋)
tolerance 上界 :一個大到能吞下任何 regression 的容差本身就該是 gate error
pass 行渲染 tolerance :稽核一個通過時,判準必須可見。
⚠️ 此項會改變 happy-path 輸出,與 baseline-compare.py:驗證 metric + render 邊界跳脫控制字元 (#117) #132 的 byte-identical 回歸鎖衝突,需同時更新該測試
Impact
scripts/lib/baseline-compare.py、Tests/BestASRKitTests/RegressionBaselineTests.swift
(含 #132 建立的 byte-identical 鎖)。
DA 裁決:F3 的 code 落在 scope 規則之外(既有缺陷,非 #132 造成或揭露),且
「categorically worse + 三行可修」的例外論證在自己的前提上失敗 ——它不是三行,
而且那三行沒用。#132 只修它自己弄假的文字 (CHANGELOG 原本斷言 float() 在做驗證)。
命名
DA 明確要求本 issue 的 scope 是**「gate 對真實 regression 回報 exit 0」**,
而非「NaN 處理」——NaN 只是其中一條路徑,tolerance 那條不涉及任何非有限數。
Source : /idd-verify PR #132 — security lens F3(NaN)+ Devil's Advocate(否決該修法、
並發現 tolerance 未渲染這條獨立路徑)。
Problem
regression gate 會對真實的 regression 回報 exit 0。 這是 fail-open——gate 在該擋的
時候說通過,比任何 log 顯示問題嚴重一個量級。
發現於 #132(#117)的 verify:security lens 找到 NaN 路徑,Devil's Advocate 隨後證明
NaN 只是其中一條,且 security 建議的修法無效。
路徑一:非有限數(security lens 實測)
json.load接受NaN/Infinity/1e999。measured 0.99 對 golden 0.10,gate 印出
✓ all corpora within tolerance並 exit 0。DA 實測否決了「三行就能修」的說法:
json.load(parse_constant=...)不能關閉這個class——
{"golden": "NaN"}作為 JSON 字串根本不觸發parse_constant,而後續的float("NaN")/float("1e999")仍然產生 nan / inf。路徑二:
tolerance從不被渲染(DA 發現,更難察覺)pass 行印的是 golden / measured / diff,但不印
tolerance——閾值只在失敗行出現。也就是說:稽核一個「通過」時,唯一能揭穿它的數字恰好被隱藏。
此值通過所有現有防線:Swift schema test 的
tolerance > 0、JSONSerialization、parse_constant、math.isfinite()。Type
bug
Expected
gate 對「真實 regression」不得 exit 0。至少需要:
golden/tolerance/error_rate必須是有限數且落在合理範圍(
math.isfinite()+ 上界;注意字串形式的"NaN"也要擋)tolerance上界:一個大到能吞下任何 regression 的容差本身就該是 gate errortolerance:稽核一個通過時,判準必須可見。Impact
scripts/lib/baseline-compare.py、Tests/BestASRKitTests/RegressionBaselineTests.swift(含 #132 建立的 byte-identical 鎖)。
為什麼不在 #132 修
DA 裁決:F3 的 code 落在 scope 規則之外(既有缺陷,非 #132 造成或揭露),且
「categorically worse + 三行可修」的例外論證在自己的前提上失敗——它不是三行,
而且那三行沒用。#132 只修它自己弄假的文字(CHANGELOG 原本斷言
float()在做驗證)。命名
DA 明確要求本 issue 的 scope 是**「gate 對真實 regression 回報 exit 0」**,
而非「NaN 處理」——NaN 只是其中一條路徑,
tolerance那條不涉及任何非有限數。Source: /idd-verify PR #132 — security lens F3(NaN)+ Devil's Advocate(否決該修法、
並發現 tolerance 未渲染這條獨立路徑)。