Files
sf-jin-ku 6ed9d98e35 fix(claude): keep at-limit claude-swap cards complete (#3081)
* fix(claude): keep at-limit claude-swap cards complete

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: cite at-limit claude-swap card PR

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): keep non-limit claude-swap sentinels metrics-less

Project usage only for ok and unavailable slots, and retain a previous snapshot only when the email still matches and a 100% window has not reset.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): drop expired windows from retained at-limit snapshots

Keeping the whole previous snapshot after any sibling reset still showed
"Resets now" on lanes that had already recovered.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): retain at-limit swap windows in CLI and dashboard

One-shot cards and dashboard now reuse the last slot windows so an
unavailable cswap row with null usage keeps the exhausted bars.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): bind retained at-limit windows to the slot account

A SHA-256 fingerprint in the retained-usage cache rejects leftover 100% bars after the same slot is reused by a different account.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): prune expired windows on attached unavailable snapshots

Direct cswap unavailable payloads with mixed reset times now drop already-reset lanes the same way retained snapshots do.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): keep retained at-limit bars on dashboard and app restart

Seed the app projection from the retained-usage cache after a relaunch, and render dashboard windows alongside the deferred/limit note instead of returning after the error.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): require an email before retaining at-limit windows

Slot-only fingerprints reused bars after an email-less account was replaced. Decline persistence and reuse unless the row has an email, and move the changelog note to 0.54.1 Unreleased.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): save retained usage only for current refreshes

Stale claude-swap refreshes were writing the on-disk cache before the generation guard, and 100% windows without a future reset were kept forever.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ci): flatten fingerprint matching and expect localized API key details

SwiftFormat rejected the nested guard wrap, and OpenRouter detail titles now follow the #3084 localization pass.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(claude): drop retained windows without a future reset

A non-exhausted session lane with no resetsAt was kept beside a weekly at-limit bar and re-saved until that weekly reset, so a five-hour value could linger for days.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-19 23:41:50 -07:00
..