t178:托盤標籤與錯誤訊息對齊實際行為(leo 封測者實撞)

【leo 08-04】封測者是台大資工碩士,仍搞不清楚 ⇒「一般人就完蛋了」。
他的托盤顯示「oscar · Claude」但他根本沒有 Claude,
同時錯誤說「Gemini 金鑰是空的」——**兩個訊息互相矛盾**。

① 標籤與行為脫鉤(accountEngineLabel)
   direct.go 早就把 claude 正規化成 gemma(t176:地端先只支援 Gemini),
   但標籤照 config 舊字串念 ⇒ 顯示 Claude、實際走 gemma。
   舊值來源=雲端舊版下發後留在 config.json 的殘留(t176 擋了新寫入、沒洗舊值)。
   修:claude 也顯示「· Gemini」,與萃取實際走的路一致。

② 錯誤訊息沒說設定在哪
   舊:「請在設定裡輸入 Gemini API Key」——用戶找不到入口。
   新:「點托盤選單的『AI 設定…』貼上金鑰(免費申請:aistudio.google.com/apikey)」
   ——錯誤訊息本身就要能當 onboarding。

測試:TestAccountEngineLabel 兩則斷言翻轉成新規格(claude→仍顯示 Gemini),
並註明「若變回 · Claude 代表標籤又和萃取實際走的路脫鉤」;兩模組全綠。

⚠️ 未送達:daemon 執行檔要打包 v0.15.5 出貨才會到用戶手上。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-04 11:33:13 +08:00
parent ae0a94b172
commit 1a3e974941
3 changed files with 17 additions and 6 deletions
+6 -3
View File
@@ -726,10 +726,13 @@ func accountEngineLabel(acc accountCfg, defaultExtractor string) string {
extractor = strings.TrimSpace(defaultExtractor)
}
switch extractor {
case "gemma":
// t178leo 08-04 實撞:朋友的托盤顯示「oscar · Claude」,但他根本沒有 Claude):
// `claude` 也顯示 Gemini——因為 **direct.go 早就把 claude 正規化成 gemma**
// t176:地端先只支援 Gemini)。標籤若照著 config 的舊字串念,就與實際行為不符
// ⇒ 用戶看到 Claude、卻收到「Gemini 金鑰是空的」,兩個訊息互相矛盾、更難懂。
// 舊值來源=雲端舊版下發後留在 config.json 的殘留(t176 擋了新寫入,沒洗掉舊的)。
case "gemma", "claude":
return " · Gemini"
case "claude":
return " · Claude"
}
return ""
}
+6 -2
View File
@@ -495,9 +495,13 @@ func TestAccountEngineLabel(t *testing.T) {
want string
}{
{"帳號有gemma", accountCfg{Extractor: "gemma"}, "", " · Gemini"},
{"帳號有claude", accountCfg{Extractor: "claude"}, "", " · Claude"},
// t178leo 08-04 實撞:朋友托盤顯示「oscar · Claude」但他根本沒有 Claude):
// **claude 也顯示 Gemini**——因為 direct.go 早就把 claude 正規化成 gemmat176)。
// 標籤照 config 舊字串念會與實際行為不符:用戶看到 Claude、卻收到「Gemini 金鑰是空的」。
// 這兩則若變回「· Claude」,代表標籤又和萃取實際走的路脫鉤了。
{"帳號有claude→仍顯示 Gemini(實際就是走 gemma", accountCfg{Extractor: "claude"}, "", " · Gemini"},
{"帳號空退回default-gemma", accountCfg{}, "gemma", " · Gemini"},
{"帳號空退回default-claude", accountCfg{}, "claude", " · Claude"},
{"帳號空退回default-claude→仍顯示 Gemini", accountCfg{}, "claude", " · Gemini"},
{"兩者皆空無標籤", accountCfg{}, "", ""},
{"帳號層優先於default", accountCfg{Extractor: "gemma"}, "claude", " · Gemini"},
}
+5 -1
View File
@@ -442,7 +442,11 @@ func RunDirectOnce(cfg *DirectConfig, dryRun bool) ([]DirectResult, int, *Trigge
if cfg.Extractor == "gemma" {
if strings.TrimSpace(cfg.GeminiAPIKey) == "" {
extractorOK = false
extractorError = "金鑰是空的——請在設定裡輸入 Gemini API Key"
// t178leo 08-04:封測者是台大資工碩士都卡住 ⇒「一般人就完蛋了」):
// 舊訊息「請在設定裡輸入 Gemini API Key」**沒說設定在哪** ⇒ 用戶找不到入口。
// 錯誤訊息本身就要能當 onboarding:指名選單項、指名去哪申請。
extractorError = "還沒設定 Gemini API Key ⇒ 點托盤選單的「AI 設定…」貼上金鑰" +
"(免費申請:aistudio.google.com/apikey"
}
}