專案

一般

配置概況

動作

Bug #356

進行中
SC

修 L4 工具鏈 v1.7.8 五缺陷:URL 黏標點假404/S1 stderr 掃 legacy/verdict 黏標點消失/「同上」L4 逃逸/binary 零 hunk 跳過+DA 對抗補修+回歸 47/32/21+決策樹清掃

Bug #356: 修 L4 工具鏈 v1.7.8 五缺陷:URL 黏標點假404/S1 stderr 掃 legacy/verdict 黏標點消失/「同上」L4 逃逸/binary 零 hunk 跳過+DA 對抗補修+回歸 47/32/21+決策樹清掃

是由 Sashiba Chou21 天 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-11
完成日期:
完成比例:

0%

預估工時:

概述

fabrication-check/claims_gen v1.7.8 工具鏈補丁:L4 exit=2 事故 triage 五缺陷修復+DA 對抗補修+決策樹清掃

背景

2026-07-11 對《IEC62304-SOUP條款號裁決_查證》跑 L4 外部接地得 exit=2。協調者 triage(PM 規劃前診斷實讀 hook 原始碼+L4 報告內容)確認紅旗全數源於工具鏈自身缺陷、非研究內容問題——含 checkpoint 待辦原列三候選中的兩項,及兩個新發現缺陷。本 ticket 為防線本身(fabrication-check.ps1/claims_gen.py/run_external_review.py)的 bug 修復,非研究,不走三角;依證據紀律,修改前後均附回歸指令+exit code+HEAD 版對照。

變更內容

1 四項主修(L4 exit=2 直接根因)

  • URL 擷取穿透反引號/CJK 標點fabrication-check.ps1$UrlReclaims_gen.py _URL_RE 孿生修復):舊 stop set 讓 `URL`)。`文字` 比對成污染串——isystem PDF 的「HTTP 404」實為 URL 黏全形「)」的假 404;pdf-requests PENDING 警告同源(URL 黏進後續散文無法與快取 header 比對)。修:stop set 加反引號+自 $TrailPunct 派生之 CJK 尾標點;claims_gen 同步+rstrip
  • S1 掃 legacy 行事故根因確認並修復(上輪「S1 warn 6/8」):PS5.1 下 $ErrorActionPreference='Stop'2>$null 會把 git 任何 stderr 變 terminating error;自然觸發源=core.autocrlf CRLF 警告——實測 git diff 會發、git status 不發,故 hook 活著但 diff 被炸 → fail-open 全檔掃描 → legacy 行誤報。修:新 Invoke-GitQuiet(呼叫期間暫降 EAP、以 exit code 分辨「diff 成功但空=本輪無新增」vs「git 真失敗=維持 fail-open 全掃」);porcelain 兩處同步硬化。
  • grounding 判定詞黏 CJK 標點靜默消失(L4 報告 row1–4「團隊判定 -」真因):舊 whitespace/slash 切分切不出 unsupported(範圍不符…。修:_find_verdict(已知詞表+位置最早+ASCII 詞界,xunsupportednot-unsupported 不誤中)。
  • 「同上」指代聲稱斷根(首跑唯一 disagree 紅旗真因,表格寫作規範漏洞非造假):claims_gen 逐列抽取不繼承上列,「同上」被原樣送外部逐字找=必然假不一致。修:self-reference 列顯式 skip+警告;另含省略號聲稱發 warn(列保留)。

2 devil-advocate 對抗審視補修(判定:需小修不需退回)

  • D(最高風險)「同上」skip 的確定性 L4 逃逸封堵:skip 列不進 claims.json 但 ledger 以檔案 sha256 蓋整檔章。修:claims_gen self-reference skip --quiet 下也絕不消音run_external_review.py 偵測 escaped 承重列 → [ESCAPED] 逐列列出+強制 exit 2、全 escaped 時不蓋章。
  • B(高風險)零 hunk diff 靜默跳過:控制字元使 git 判 binary(exit 0+非空輸出+零 hunk)→ 原修法會回「無新增行」=新增 行跳過 S1。修:非空零 hunk → fail-open 全掃;diff pathspec 改 :(literal) 防 glob 字元檔名;porcelain 補讀 exit(非零不信任部分 stdout)。
  • C(中風險)否定語境誤抽:「並非unsupported」會被抽成判定 → 分歧被吸收成一致。修:negation guard(非/不/沒/無/not/non/never 緊鄰前綴跳過,全被否定誠實回 None)。
  • A(中風險,誠實殘留不修):URL 截斷碰撞(需 URL 路徑內原生 CJK 標點/反引號,極罕見;截斷雙邊一致不產生單邊誤報)——記入 hooks README「誠實的限制」。
  • E(EAP 暫降副作用)通過挑戰無需修。DA 挑戰記錄存 .claude/agent-memory/devil-advocate/hook-patch-review-20260711.md
  • 順修:run_external_review.py stamp_ledger 跨磁碟 relpath ValueError(審完才炸、丟失蓋章)補 abspath fallback。

3 回歸證據(修改前基線 → 修後全綠,含 HEAD 版對照)

  • test-v17-s1s2s6.ps1:基線 42 案 exit 0 → 47 案 all PASS exit 0(新增:git-stderr legacy 不誤報+攻擊面不鬆動、backtick URL 靜音+不鬆動、binary 零 hunk fail-open)
  • test-claims-gen.py:11 → 32 passed exit 0(合成 CJK fixture+真實查證檔雙軌:URL 乾淨/verdict 齊/同上 skip/否定語境/--quiet 不消音)
  • test-external-review.py:18 → 21 passed exit 0(escaped 列強制 exit 2、全 escaped 不蓋章);CJK 回歸 PASS exit 0
  • HEAD 版(修前)對照:同一 fixture 修前 hook 誤發 S1 BLOCK/claims_gen 7 claims 全缺 verdict+URL 帶「)」;修後正確靜默/6 claims 全齊
  • hooks README 新增 v1.7.8 節(含 DA 補修與殘留 A)

4 L4 實證重跑(人類執行,兩輪)

  • 第一輪重跑:假 404 消失(外部真的讀到 isystem 內容、判 cannot-locate 與團隊「預覽版止於 Clause 3.7」同向)、row1–4 團隊判定齊全、row6 改顯式 [ESCAPED]
  • research-verifier(唯一授權寫者)將查證檔 row 6「同上,獨立第二來源」忠實展開為完整聲稱文字(零內容變更,MCP 自檢 PASS,檔內留格式修正註記)。
  • 第二輪重跑:7 條全送審、row 6 GROUNDED+引文子字串 PASS、無 ESCAPED,新蓋章 sha256=27f5aa8b7afd。exit 2 組成全數歸因:quality_flag ×7=unassessed 強制人工把關(設計如此);#3/#4 unsupported vs cannot-locate=分類學差異同為否定判定;#5 elsmar fetch-fail HTTP 520=暫時性(首輪同 URL GROUNDED+PASS,sha256=60f9209285e6 留 ledger;第二輪報告覆寫首輪同名檔,首輪證據存 ledger 戳 61ad85a6c461)。
  • 人類抽查:isystem 預覽版字串(快取檔 Ctrl+F)+ #5 elsmar 引文親手開頁 Ctrl+F——均 PASS(2026-07-11 業主回報)。
  • 對 specs 零影響:「不寫入條款號」裁決維持、標籤全 、無升級無 ADR。

5 決策樹+pdf-requests 清掃(checkpoint 待辦 2,PM 規劃、頂層代寫)

  • 00-index.md:Q-A2D2-slam-verify-regulatory 歸入 §C、NEW 區清空、治理稽核里程碑(2026-07-09)依業主裁示移入修訂歷史
  • 反向標註 4 檔:Q-A2D2-onboard-IR/Q-RC7/Q-RC6(「被承接/平行 Q-A2D2-slam-verify-regulatory」段)+ adr-0005(cross-link 非重審觸發)——S2 spawn-absence warn 屬預期(頂層依 PM 計畫代寫維護性 cross-link,已向業主揭露)
  • diagrams.md 新增 Phase 6 子圖(OW-D11/ADR-0004/ADR-0005/Q-AR-VIU/Q-RC6/Q-A2D2/Q-RC7/Q-RC8/Q-SLAM 依賴線)
  • pdf-requests 兩條殘留標註:TFDA URL 對齊快取 header(去 &iid=11988,註明 f33b8b34783b 完整正本);IEC webstore 改寫為域名斷開+註明付費頁不適用 pdf_fetch、走 PI 採購——hook PDF PENDING 誤報實測靜音(exit 0)

治理紀錄

  • 防線修改證據紀律:修改前後回歸指令+exit code+HEAD 對照全數留存(本 ticket §3)
  • devil-advocate 對抗審視完成(防線修改的雙向檢查:誤報修復未拆舊安全網,攻擊面案例 43/45 固化「不鬆動」)
  • 人類抽查(L4 紅旗 triage 抽查 2 條)PASS;watcher≠watchee:L4 兩輪均由業主親跑
  • row 6 展開由 research-verifier(寫入矩陣唯一授權者)執行,非協調者代寫
  • external_review.2026-07-11_*.mdl4-ledger.txt 依上輪(#350)慣例 git add -f 一次性納入,.gitignore 政策未變

驗收標準

  • 四套回歸全綠且案例數只增不減(47/32/21/CJK,基線 42/11/18)
  • 真實查證檔經修後 claims_gen:7 條全齊 verdict、URL 無「)」/反引號污染、無靜默 skip
  • L4 重跑(人類執行):假 404 消失、row 6 GROUNDED、escaped 列機制運作(先旗標後修表)
  • DA 三補修各有攻防雙向回歸案例;殘留 A 誠實記 README
  • hook PDF PENDING/L4 DUE 誤報靜音(實測 exit 0);決策樹 NEW 區清空+反向標註+Phase 6 子圖落地
  • specs 零變更、無標籤升級、無 ADR 觸發

未執行項目(另案)

  • Andrews2020 L4(checkpoint 待辦 4)
  • IEC 62304 官方正本採購(PI 行動需求,業主:之後決定)
  • 殘留 A(URL 截斷碰撞)如未來實際發生再修(README 已記)
  • tree/research 反向標註角色歸屬(本次頂層代寫觸發 S2 warn;如業主要求嚴格走矩陣,日後改派 research-synthesizer)

沒有任何資料可供顯示

動作

匯出至 PDF Atom