Skip to content

regression gate 對真實 regression 回報 exit 0(fail-open):非有限數 + tolerance 從不被渲染 #134

Description

@kiki830621

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 = NaNdiff = actual - golden = NaN
                   NaN > tolFalse      →  「✓ 通過

measured 0.99 對 golden 0.10,gate 印出 ✓ all corpora within toleranceexit 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 > 0JSONSerialization
parse_constantmath.isfinite()

Type

bug

Expected

gate 對「真實 regression」不得 exit 0。至少需要:

  1. 數值健全性golden / tolerance / error_rate 必須是有限數且落在合理範圍
    math.isfinite() + 上界;注意字串形式的 "NaN" 也要擋)
  2. tolerance 上界:一個大到能吞下任何 regression 的容差本身就該是 gate error
  3. pass 行渲染 tolerance:稽核一個通過時,判準必須可見。
    ⚠️ 此項會改變 happy-path 輸出,與 baseline-compare.py:驗證 metric + render 邊界跳脫控制字元 (#117) #132 的 byte-identical 回歸鎖衝突,需同時更新該測試

Impact

scripts/lib/baseline-compare.pyTests/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 未渲染這條獨立路徑)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions