Repository navigation
feat(claude): Fable resets are offered and redeemed apart from weekly resets - #34106
Conversation
… resets Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Claude reset credits are now offered by refill type, letting users redeem Fable resets separately from weekly resets. Redemption remains explicitly confirmed and uses the existing account-scoped redemption safeguards. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
…e it closes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 18e168f
…contrast * origin/main: (480 commits) fix(scripts): scenarios run where localhost resolves to IPv6 first (pingdotgg#34121) feat(opencode): track native image job outcomes and previews (pingdotgg#34089) fix(web): scroll project picker to top on first result (pingdotgg#34113) feat(server): voice models reuse copies already on disk (pingdotgg#34096) fix(desktop): desktop IPC only answers the main app window (pingdotgg#34094) feat(claude): Fable resets are offered and redeemed apart from weekly resets (pingdotgg#34106) feat(scripts): scenarios prove a fix in the real app with e2e, on web and iOS (pingdotgg#34007) fix(web): question panel header text sits centered in its row (pingdotgg#34095) fix(server): a t3 thread send to a finished delegated child notifies its parent (pingdotgg#33446) feat(mobile): pick a voice environment once, then its method (pingdotgg#34073) fix(mobile): attaching larger images no longer crashes with a BigInt error (pingdotgg#34087) fix(server): quitting stops an agent-device daemon left by an earlier server (pingdotgg#33587) fix(web): sent messages keep the numbers written on list items (pingdotgg#33820) fix(desktop): input during window teardown no longer throws in the main process (pingdotgg#33620) fix(web): preserve previews during attachment preparation (pingdotgg#33949) feat(usage): show Muse Code limits, and xAI and Antigravity accounts from a CLIProxyAPI hub (pingdotgg#33800) fix(server): text generation fallback respects project provider settings (pingdotgg#33741) fix(web): sending from an empty citation comment clears the composer (pingdotgg#33440) fix(github): a proxy's 403 with Retry-After is no longer reported as a rate limit (pingdotgg#33676) fix(web,mobile): replace sparkles icons and ban them with a lint rule (pingdotgg#25422) ... # Conflicts: # pnpm-lock.yaml
Main's pingdotgg#34106 now offers and redeems each kind of reset by its own grant. Keep that model and carry only this branch's per-window badge counts, using each reset option's cleared window ids.
Claude now hands out two kinds of banked reset: a weekly reset and a Fable reset. The Fable reset refills only the Fable allowance and gives back what Fable used on the weekly limit; it does not reset the whole week. T3 Code added every grant into one count and always redeemed whichever grant Claude listed next, so "Use reset" could spend the Fable reset when you wanted the weekly one, and the dialog promised to clear your windows either way.
Fix
Server.
claudeResetCreditsgroups thecedar_embergrants by kind, using the same rule as the Claude CLI (2.1.322):typedecides;Each kind becomes a reset-credit option with its own grant, count, expiry and description.
Redeeming. The instance consume RPC takes an optional
creditId. The Claude driver redeems that option's grant, after checking it is still offered. As before, one request ID per login is kept until Claude answers, so a retry after an unconfirmed claim resends the same request ID instead of starting a new claim.Clients. Web (composer, usage page and pool popover) and mobile show one row per kind, each with its own Use button. The confirm dialog says what that reset refills. The shared
resetCreditChoiceshelper sits in@t3tools/shared/usageLimits.Compatibility. The new contract fields are optional. Older clients keep the single total and next-grant redemption, and Codex has only one kind of reset, so it keeps the single-button UI.
Evidence
Both builds ran with the same temporary fixture: one weekly grant and one Fable grant, parsed through
claudeResetCreditsToContract. Claude on the capture machine routes through a proxy, so it returns no real grants.The "before" row shows the Fable grant's expiry (118 days) under a generic "2 banked", because the next grant Claude listed was the Fable one.
Verification
claudeResetCredits.test.tshas a new case: separate weekly, Fable and 5-hour options, each pinned to its own grant. It fails onmain.vp run check:changedpasses: format, lint, knip, typecheck and the affected tests.Limits
🤖 Generated with Claude Code (Claude Opus 5.5)