Problem
CommandCore.swift 在呼叫引擎之前就算出 rec(含 warnings),但 warnings 只掛在 TranscribeOutcome 上,而 TranscribeOutcome 只在成功時存在:
:350-351 let rec = try router.recommend(...) // warnings 在這裡就有了
:357 let result = try await engine.transcribe(...) // 這裡拋出 → 下面全部不執行
引擎拋出時 runMapped 只印 error: …,TranscribeDiagnostics.report 從未被呼叫。所有 router warnings 靜默消失。
具體情境就是 #136 自己的開場範例:使用者 --backend fluid-parakeet,該 backend 不可用 → 產生替換警告 → 替換後的引擎失敗。使用者被告知「執行失敗」,但不會被告知跑的根本不是他要的 backend。
而在失敗路徑上知道發生過替換,比在成功路徑上更有用——那是「為什麼失敗」的第一個候選解釋。
Type
bug
Evidence
CommandCore.swift:350-351(rec 計算)vs :357(engine.transcribe),中間沒有任何 warning 輸出。
BestASRCommand.swift 的 runMapped catch 區塊只寫 error: 一行。
- 全 repo grep:
rec.warnings 的唯一去處是 TranscribeOutcome(...) 的建構,而該建構在 transcribe 成功之後。
先前存在,非 #141 引入。但 #141 的新架構把它固化了:在此之前 warnings 只是 explanation 字串的一部分(同樣掉失,但沒有結構);現在 warnings 是 TranscribeOutcome 的一個欄位,而該型別的生命週期定義上就是「成功」。要在失敗時把它們攤出來,不再是搬一行的事。
可能的方向(未定案)
發現於 PR #141 round-3 verify(logic lens,L5)。相關:#136。
Problem
CommandCore.swift在呼叫引擎之前就算出rec(含 warnings),但 warnings 只掛在TranscribeOutcome上,而TranscribeOutcome只在成功時存在:引擎拋出時
runMapped只印error: …,TranscribeDiagnostics.report從未被呼叫。所有 router warnings 靜默消失。具體情境就是 #136 自己的開場範例:使用者
--backend fluid-parakeet,該 backend 不可用 → 產生替換警告 → 替換後的引擎失敗。使用者被告知「執行失敗」,但不會被告知跑的根本不是他要的 backend。而在失敗路徑上知道發生過替換,比在成功路徑上更有用——那是「為什麼失敗」的第一個候選解釋。
Type
bug
Evidence
CommandCore.swift:350-351(rec計算)vs:357(engine.transcribe),中間沒有任何 warning 輸出。BestASRCommand.swift的runMappedcatch 區塊只寫error:一行。rec.warnings的唯一去處是TranscribeOutcome(...)的建構,而該建構在transcribe成功之後。先前存在,非 #141 引入。但 #141 的新架構把它固化了:在此之前 warnings 只是
explanation字串的一部分(同樣掉失,但沒有結構);現在 warnings 是TranscribeOutcome的一個欄位,而該型別的生命週期定義上就是「成功」。要在失敗時把它們攤出來,不再是搬一行的事。可能的方向(未定案)
recommend之後、transcribe之前就 emit,或讓 error 型別攜帶 diagnostics)。發現於 PR #141 round-3 verify(logic lens,L5)。相關:#136。