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.
**v0.1.9-nightly.20261111.4501** · 17 changes from 3 contributors - **Separate Claude resets.** Choose between Fable and weekly resets without spending the wrong allowance. - **Reuse voice models.** Set up local speech-to-text faster by reusing compatible models already on your computer. ### Plus 11 more bug fixes. <details> <summary>Full changelog</summary> ## What's Changed * fix(mobile): attaching larger images no longer crashes with a BigInt error by @juliusmarminge in pingdotgg/t3code#34087 * feat(mobile): pick a voice environment once, then its method by @juliusmarminge in pingdotgg/t3code#34073 * fix(server): a t3 thread send to a finished delegated child notifies its parent by @juliusmarminge in pingdotgg/t3code#33446 * fix(web): question panel header text sits centered in its row by @juliusmarminge in pingdotgg/t3code#34095 * feat(scripts): scenarios prove a fix in the real app with e2e, on web and iOS by @juliusmarminge in pingdotgg/t3code#34007 * feat(claude): Fable resets are offered and redeemed apart from weekly resets by @juliusmarminge in pingdotgg/t3code#34106 * fix(desktop): desktop IPC only answers the main app window by @juliusmarminge in pingdotgg/t3code#34094 * feat(server): voice models reuse copies already on disk by @juliusmarminge in pingdotgg/t3code#34096 * fix(web): scroll project picker to top on first result by @Yash-Singh1 in pingdotgg/t3code#34113 * feat(opencode): track native image job outcomes and previews by @Yash-Singh1 in pingdotgg/t3code#34089 * fix(scripts): scenarios run where localhost resolves to IPv6 first by @juliusmarminge in pingdotgg/t3code#34121 * ci: browser secret helper apt step fetches fewer indexes by @t3dotgg in pingdotgg/t3code#33966 * fix(client-runtime): a search query pasted from github.com lists pull requests again by @juliusmarminge in pingdotgg/t3code#30150 * fix(web): tighter outdated-conversation cards in the PR code panel by @Yash-Singh1 in pingdotgg/t3code#34140 * fix(web): MCP App cards no longer flash white in dark mode while the app loads by @juliusmarminge in pingdotgg/t3code#33352 * fix(peer): link requests use the addresses the app already has for a machine by @t3dotgg in pingdotgg/t3code#34139 * fix(server): Find frees searched thread text after one idle minute by @t3dotgg in pingdotgg/t3code#34132 **Full Changelog**: pingdotgg/t3code@v0.1.9-nightly.20261110.4491...v0.1.9-nightly.20261111.4501 </details> Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.9-nightly.20261111.4501
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)