Skip to content

帳號用量 bar 語意與 Claude 官方相反:填滿量是剩餘而非已用,與 status bar HUD 兩套慣例並存 #110

Description

@kiki830621

Problem

Original text:
「狀態條的設計要類似claude,從使用多少來看,現在狀態條的設計好像反了」
— Source: 使用者回報(2026-08-02,附 claude.ai Plan usage limits 頁截圖為參考設計)

用量 bar 應比照 Claude 官方 UI 的語意:填滿量 = 已使用比例。Logos 目前的帳號用量顯示是剩餘導向——用越多 bar 越空——與參考設計相反。

參考截圖描述(截圖含使用者方案/用量數據,依 public-repo 紀律不上傳,文字記錄):claude.ai 設定頁「Plan usage limits」,每列一條水平 bar + 右側「N% used」標籤。填滿部分 = 已使用比例:16% used 只填一小段(藍)、87% used 填大半(琥珀)、93% used 幾乎全滿(紅)——顏色隨用量升高遞進。

Type

bug(UI 語意)

Expected

比照 Claude:bar 的填滿量代表已使用(0 used = 空、100% used = 滿),標籤顯示「N% used/已用」,顏色以已用比例遞進(低=綠或藍 → 高=紅)。app 內所有用量 bar 採同一慣例。

Actual

兩套相反的慣例並存:

位置 語意 與 Claude 對照
帳號用量視窗Sources/LogosUsage/AccountRowView.swiftUsageBar 剩餘導向ProgressView(value: percentRemaining),標籤「N% 剩餘」,barColor 以剩餘量判色(剩 <10% 紅) 反了——93% used 顯示為幾乎空的 bar,Claude 是幾乎滿的紅 bar
Status bar HUD(HUDProgressBar + PlanUsageStatusItem 消耗導向:fraction = utilization/100(0=空、1=滿),<70% 綠 / 70–90% 黃 / ≥90% 紅 已同 Claude 慣例

資料層本身就是 used-based(UsageWindow.utilization = 已用 %;percentRemaining 是加工出來的 100 - utilization),所以修正是顯示層翻轉,不動資料模型。

Impact

  • 同一 app 內兩個 surface 對「bar 快滿」給出相反的解讀(HUD 滿 = 危險;帳號用量視窗滿 = 安全),使用者要記兩套規則。
  • 與 claude.ai 官方頁並看時(常見情境:對照配額),視覺直覺直接衝突。

修法候選(留給 diagnose 裁決)

  1. UsageBar 翻轉為 used 導向:ProgressView(value: utilization)、標籤「N% 已用」、判色改用已用比例(可直接共用 HUDUsageLevel 的 70/90 分帶,順便統一兩處的閾值與色彩)。
  2. reset 時間顯示等其餘元素不動。

Notes


Current Status

Phase: verified
Last updated: 2026-08-04 by /idd-verify(經 /idd-all 批次 #110–114)

Key Decisions

  • 顯示層量化做一次utilizationPercent(clamped raw 四捨五入)是唯一量化點,label / 填充 / 色階全部從它導出 —— 數字與顏色不能跨門檻分岔
  • 模型層與顯示層的精度刻意不同percentRemaining 與 raw utilization 精確互補;utilizationFraction 是量化後的顯示投影。12.5 → 顯示 13% 已用、模型 87.5% 剩餘,是兩個精度不是矛盾
  • 非有限值政策:讀不到有效值 = 0% 已用 / 100% 剩餘 / nominal 綠(非 critical 紅)
  • 極性方向為已用(本 issue 方向),推翻 狀態列與帳號用量的用量標示極性相反:一個標「已用」、一個標「剩餘」——統一到剩餘 #114 的「剩餘」要求
  • HUDUsageLevelUsageLevel 下移 LogosUsage,兩畫面共用 70/90 門檻

Scope Changes

Blocking

  • (none) —— verify PASS,等人工 /idd-close

Commits

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