Problem
Original text:
「然後下方標示 [截圖] 應賅跟帳號用量的標事宜樣。都是標記剩餘的吧」
— Source: user, live session 2026-08-03(/idd-issue invocation,附截圖)
同一份 plan-usage 資料在兩個介面用相反的極性呈現:狀態列(下方 HUD)標「已用」,帳號用量視窗標「剩餘」。使用者要求統一,並指定統一到「剩餘」那一側。
附件缺席(誠實記錄):使用者這次貼的截圖在 /idd-issue 執行時已從 image-cache 被清掉(整個 session image-cache 目錄不存在),無法依 Step 1 的 immediate-persistence 規則 stage 起來上傳。這是 skill 有記錄的已知 failure mode(cache eviction),不是漏做。需要圖的話請重貼,會補上到 attachments release。
Type
bug
Expected
狀態列與帳號用量對同一個用量視窗給出同一個方向的讀數:都標「剩餘」。數字、進度條填充方向、顏色門檻三者一致——條在額度被消耗時變短,接近用完時轉紅。
Actual
兩邊極性相反,而且來源是同一個欄位(UsageWindow):
| 介面 |
檔案 |
數字 |
進度條 |
顏色門檻 |
| 狀態列 plan 段 |
Sources/Logos/Views/StatusBar/PlanUsageStatusItem.swift:87-89 |
Int(window.utilization)% = 已用 |
HUDProgressBar(fraction: window.utilization / 100) — 用越多越長 |
HUDUsageLevel:<0.70 綠 / 0.70–0.90 黃 / ≥0.90 紅(keyed on consumed) |
| 帳號用量 |
Sources/LogosUsage/AccountRowView.swift:135-152 |
\(Int(percentRemaining))% 剩餘 = 剩餘 |
ProgressView(value: percentRemaining, total: 100) — 用越多越短 |
barColor:<10 紅 / <25 橘 / else 綠(keyed on remaining) |
Sources/LogosUsage/UsageModels.swift:29 定義 percentRemaining = max(0, min(100, 100 - utilization)) —— 兩個畫面吃的是同一個 utilization,只是一邊取補數。
具體後果:某帳號 5h 視窗用掉 90% 時,狀態列寫「5h 90%」配一條幾乎填滿的紅條,帳號用量寫「10% 剩餘」配一條幾乎空掉的紅條。兩個畫面同時開著時,同一件事看起來像兩個相反的讀數。
同樣的極性問題也出現在狀態列的 context 段(ContextUsageStatusItem.swift:13-16, 23):97k / 200k 是已用 / 上限,HUDProgressBar 同樣是 consumed fraction。
Impact
用量讀數存在的唯一理由是讓人一眼判斷「還能不能繼續」。同一個 app 內兩個畫面對同一個數字用相反方向呈現,就是把這個判斷變成需要先想一下「這條是滿代表好還是壞」。而且是在最需要快速判斷的時候(快撞 rate limit)才會同時看這兩個地方。
Scope 待決(留給 diagnose)
- 範圍:只改狀態列的 plan 段(使用者原話明確指的是這個),還是連 context 段(
97k / 200k)一起翻成剩餘?兩者現在都是 consumed-polarity,只改一個會製造新的不一致。
- 顏色門檻要跟著翻:
HUDUsageLevel 的註解明說 "keyed on the CONSUMED fraction … a higher value is always worse"。改成剩餘極性後,這個 enum 的語意必須一起翻(否則剩餘 95% 會被判成 critical)。HUDProgressBar 的 fraction 參數語意也要重新定義並更新註解與 tooltip / accessibility label(PlanUsageStatusItem 的 helpText、accessibilityLabel 目前都寫 "% used")。
- 兩邊的門檻本來就不同:帳號用量是 10/25(剩餘),狀態列是 70/90(已用,換算成剩餘是 30/10)。統一極性時要順便定一組共用門檻,否則同一個帳號在兩個畫面仍可能一綠一橘。
- 是否抽共用元件:
UsageBar(帳號用量)與 HUDProgressBar(狀態列)目前是兩套獨立實作,這正是極性會分岔的結構原因。要不要收斂成一個 source of truth(一個「剩餘」語意的 view + 一組門檻)由 diagnose 判。
Related
Clarity Surface(idd-clarify run 2026-08-03T07:59:54Z)
| Type |
Source |
Suggested canonical |
Status |
| ambiguity |
"然後下方標示 [截圖] 應賅跟帳號用量的標事宜樣" |
「下方標示」未指名是狀態列的哪一段。狀態列有兩段用量 HUD:plan 段(PlanUsageStatusItem,5h/7d/per-model 週視窗)與 context 段(ContextUsageStatusItem,97k / 200k)。本 issue 依前一則訊息的截圖脈絡假設指 plan 段,並把 context 段列入 Scope 待決 #1 —— 需確認是「只改 plan 段」還是「兩段都改」 |
resolved @ 2026-08-04T00:05:19Z (reason: 2026-08-04 裁定統一到「已用」,狀態列兩段皆不動,實作主體移至 #110 —— 本列已不影響方向) |
| ambiguity |
"都是標記剩餘的吧" |
「都」的範圍有兩種讀法:(a) 狀態列的兩個用量段都改標剩餘;(b) 狀態列與帳號用量兩個畫面都用剩餘(即帳號用量維持現狀、只有狀態列翻轉)。兩者對 Scope 待決 #1 給出不同答案 |
resolved @ 2026-08-04T00:05:19Z (reason: 同上裁定;收斂方向由 #110 的 Claude 官方慣例決定,非由「都」的範圍決定) |
| missing-context |
"[截圖]" |
能消解上面兩列歧義的輸入(使用者圈選的畫面區域)在本次 invocation 執行時已從 image-cache 被清除,無法納入 attachments release。原圖是唯一能確認「下方標示」指哪一段的證據 —— 需使用者重貼 |
dismissed @ 2026-08-04T00:05:19Z (reason: 裁定後狀態列不動,截圖已非決定依據;不再要求重貼) |
terminology class:無命中。references/terminology-canonical.md 現有 6 個 row 全屬統計/ML 領域(K-means 特徵值、PCA、ANOVA、準確率、P 值、分群),與本 issue 的 SwiftUI UI 語意無交集。這是誠實的 no-hit,不是未掃描。
Problem
同一份 plan-usage 資料在兩個介面用相反的極性呈現:狀態列(下方 HUD)標「已用」,帳號用量視窗標「剩餘」。使用者要求統一,並指定統一到「剩餘」那一側。
Type
bug
Expected
狀態列與帳號用量對同一個用量視窗給出同一個方向的讀數:都標「剩餘」。數字、進度條填充方向、顏色門檻三者一致——條在額度被消耗時變短,接近用完時轉紅。
Actual
兩邊極性相反,而且來源是同一個欄位(
UsageWindow):Sources/Logos/Views/StatusBar/PlanUsageStatusItem.swift:87-89Int(window.utilization)% = 已用HUDProgressBar(fraction: window.utilization / 100)— 用越多越長HUDUsageLevel:<0.70 綠 / 0.70–0.90 黃 / ≥0.90 紅(keyed on consumed)Sources/LogosUsage/AccountRowView.swift:135-152\(Int(percentRemaining))% 剩餘= 剩餘ProgressView(value: percentRemaining, total: 100)— 用越多越短barColor:<10 紅 / <25 橘 / else 綠(keyed on remaining)Sources/LogosUsage/UsageModels.swift:29定義percentRemaining = max(0, min(100, 100 - utilization))—— 兩個畫面吃的是同一個utilization,只是一邊取補數。具體後果:某帳號 5h 視窗用掉 90% 時,狀態列寫「5h 90%」配一條幾乎填滿的紅條,帳號用量寫「10% 剩餘」配一條幾乎空掉的紅條。兩個畫面同時開著時,同一件事看起來像兩個相反的讀數。
同樣的極性問題也出現在狀態列的 context 段(
ContextUsageStatusItem.swift:13-16, 23):97k / 200k是已用 / 上限,HUDProgressBar同樣是 consumed fraction。Impact
用量讀數存在的唯一理由是讓人一眼判斷「還能不能繼續」。同一個 app 內兩個畫面對同一個數字用相反方向呈現,就是把這個判斷變成需要先想一下「這條是滿代表好還是壞」。而且是在最需要快速判斷的時候(快撞 rate limit)才會同時看這兩個地方。
Scope 待決(留給 diagnose)
97k / 200k)一起翻成剩餘?兩者現在都是 consumed-polarity,只改一個會製造新的不一致。HUDUsageLevel的註解明說 "keyed on the CONSUMED fraction … a higher value is always worse"。改成剩餘極性後,這個 enum 的語意必須一起翻(否則剩餘 95% 會被判成 critical)。HUDProgressBar的fraction參數語意也要重新定義並更新註解與 tooltip / accessibility label(PlanUsageStatusItem的helpText、accessibilityLabel目前都寫 "% used")。UsageBar(帳號用量)與HUDProgressBar(狀態列)目前是兩套獨立實作,這正是極性會分岔的結構原因。要不要收斂成一個 source of truth(一個「剩餘」語意的 view + 一組門檻)由 diagnose 判。Related
97k / 200k的分母與極性最好一次處理完。Clarity Surface(idd-clarify run 2026-08-03T07:59:54Z)
PlanUsageStatusItem,5h/7d/per-model 週視窗)與 context 段(ContextUsageStatusItem,97k / 200k)。本 issue 依前一則訊息的截圖脈絡假設指 plan 段,並把 context 段列入 Scope 待決 #1 —— 需確認是「只改 plan 段」還是「兩段都改」