Skip to content

狀態列與帳號用量的用量標示極性相反:一個標「已用」、一個標「剩餘」——統一到剩餘 #114

Description

@kiki830621

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)

  1. 範圍:只改狀態列的 plan 段(使用者原話明確指的是這個),還是連 context 段(97k / 200k)一起翻成剩餘?兩者現在都是 consumed-polarity,只改一個會製造新的不一致。
  2. 顏色門檻要跟著翻HUDUsageLevel 的註解明說 "keyed on the CONSUMED fraction … a higher value is always worse"。改成剩餘極性後,這個 enum 的語意必須一起翻(否則剩餘 95% 會被判成 critical)。HUDProgressBarfraction 參數語意也要重新定義並更新註解與 tooltip / accessibility label(PlanUsageStatusItemhelpTextaccessibilityLabel 目前都寫 "% used")。
  3. 兩邊的門檻本來就不同:帳號用量是 10/25(剩餘),狀態列是 70/90(已用,換算成剩餘是 30/10)。統一極性時要順便定一組共用門檻,否則同一個帳號在兩個畫面仍可能一綠一橘。
  4. 是否抽共用元件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 段(ContextUsageStatusItem97k / 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,不是未掃描。

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