Skip to content

feat(claude): Fable resets are offered and redeemed apart from weekly resets - #34106

Merged
juliusmarminge merged 2 commits into
mainfrom
t3/claude-fable-resets
Nov 10, 2026
Merged

juliusmarminge merged 2 commits into
mainfrom
t3/claude-fable-resets

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Nov 10, 2026 •

Copy link
Copy Markdown
Member

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. claudeResetCredits groups the cedar_ember grants by kind, using the same rule as the Claude CLI (2.1.322):

    • a grant that gives back weekly usage is a Fable reset;
    • otherwise its declared type decides;
    • otherwise what it clears decides (5-hour, weekly or full).

    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 resetCreditChoices helper 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.

Before After
Usage → Limits, weekly segment before: one "2 banked · Use reset" row after: separate Weekly reset and Fable reset rows
Confirm dialog before: generic "clears the current rate-limit windows" after: Fable reset description

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.ts has a new case: separate weekly, Fable and 5-hour options, each pinned to its own grant. It fails on main.
  • vp run check:changed passes: format, lint, knip, typecheck and the affected tests.

Limits

  • I have not checked these mappings against a real Fable response. The grant shape comes from the Claude CLI's own schema.
  • Claude accounts pooled through a CLIProxyAPI hub still can't redeem resets, as before.
  • The mobile change is the same per-kind row as web. It was typechecked but not run on a device.
  • As before, a grant Claude marks unusable right now (for example, one that only works once you hit a limit) isn't listed.

🤖 Generated with Claude Code (Claude Opus 5.5)

… resets

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Nov 10, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Nov 10, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 18e168f

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.

@github-actions

github-actions Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.5 KiB 21.5 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 1 1 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 1 1 0 (0.0%) 8 ✅

Baseline: 43915a4 · PR result: 18e168f · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

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>
@macroscopeapp
macroscopeapp Bot dismissed their stale review November 10, 2026 23:40

Dismissing prior approval to re-evaluate 18e168f

@coderabbitai

coderabbitai Bot commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

Explain Change →

Finishing Touches

Generate docstrings

  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@juliusmarminge
juliusmarminge merged commit 9e1f81c into main Nov 10, 2026
35 of 36 checks passed
@juliusmarminge
juliusmarminge deleted the t3/claude-fable-resets branch November 10, 2026 23:47
fancyboi999 added a commit to fancyboi999/t3code that referenced this pull request Nov 11, 2026
…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
maria-rcks added a commit to TonybynMp4/t3code that referenced this pull request Nov 11, 2026
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.
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 11, 2026
**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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant