Skip to content

Upstream batch: reconnect refresh, absolute reset times, pet size ceiling, Fable 5.1 pricing - #30

Merged
CallumAcorn merged 4 commits into
mainfrom
upstream/reconnect-resets-pricing
Sep 11, 2026
Merged

CallumAcorn merged 4 commits into
mainfrom
upstream/reconnect-resets-pricing

Conversation

@CallumAcorn

Copy link
Copy Markdown
Owner

Four upstream changes taken, two declined with reasons recorded.

Taken

chattymin#252, refresh on network reconnection. NWPathMonitor, no entitlements, debounced with a cooldown. I checked the interaction with the 429 backoff added in #28: it calls the automatic refresh path, which already skips the Claude fetch while a backoff is live, so it cannot worsen rate limiting.

chattymin#263, absolute reset time next to countdowns. Pairs with the Rare Candy fix in #29, which now relies on those same reset times to detect a window rolling unobserved. Surfacing them closes the loop for the user.

chattymin#267, floating pet ceiling 192px to 384px. Their test covers panel geometry, not energy, and a 384px animated sprite costs meaningfully more than 192px. Acceptable because the size is opt-in and we now have the animation-quality setting (chattymin#212) and the layer-swap perf work (chattymin#255).

chattymin#279, the price row only. Fable 5.1 shares Fable 5's base rates but its cache read dropped from $1.00 to $0.25. Without an explicit row the fable family fallback silently applies the old rate and overstates cost 4x, which matters because cache reads dominate real usage. Injection-checked: removing the row makes the test report 1.00 against the expected 0.25.

What I did not take from chattymin#279: the other 77 lines change how Codex total-only turns are counted, which is usage attribution rather than pricing. Codex is present on this machine so it may well be wanted, but it is a different kind of change and is recorded as still needing a decision.

Declined

chattymin#264, persistent IVs and a Pokédex detail page. 1651 insertions across 16 files. This fork already has IVs (MonState.ivs/evs, StatCalc, clamped in sanitizedMon), built independently rather than taken from upstream. Applying this would run a second parallel implementation into a model that already has one: the same structural fork as the representative pin (chattymin#158) and the Raising badge (chattymin#211), at roughly ten times the size. If the Pokédex detail page is wanted later, that piece should be ported alone against our model.

chattymin#275, ambient Keychain help popover. Its explanation is correct, and worth noting it independently confirms our own root-cause diagnosis of the grant dying on token rotation. But the remedy it offers is the session key we declined as chattymin#241: the help body's payoff is "register a session key", and the button is gated on store.sessionKeyConfigured, which does not exist here. Taking the meaningful part would steer users toward a full account cookie stored in plaintext, reversing a recorded security decision. The safe half already shipped in our own revocation notice, which tells users to re-authorise instead.

Verification

1015 tests, 0 failures, 90.04% coverage. All 22 hardening checks pass. All three cherry-picks applied without conflicts.

Ledger now records 40 decisions with 10 still unreviewed, including the difficulty chain (chattymin#244, chattymin#287, chattymin#284) which is awaiting a call.

🤖 Generated with Claude Code

justinjeong5 and others added 4 commits September 11, 2026 14:32
)

* feat: trigger immediate refresh upon network reconnection

* fix: add lock synchronization and flapping debounce to NetworkReachabilityMonitor
…d weekly) (chattymin#263)

* feat: enhance 5-hour reset display with reset time aside countdown

* feat: enhance weekly reset display with reset date and time aside countdown (with weekday if not near)

* chore: update staled comment about weekly relative-only display
…min#267)

The desktop pet slider topped out at 192px. Double the maximum so the
companion can be sized up to 384px. Sprites render with
`.interpolation(.none)`, so the extra scale stays crisp pixel art instead
of blurring, and `FloatingPetController` already observes
`floatingPetSize`, so the panel resizes with the sprite as the slider
moves.

Also cover the other branch of `max(petSize, bubbleMinWidth)`, where the
pet drives the panel width rather than the bubble column. Only 184 and
192 reached it before; now it is most of the range.


Claude-Session: https://claude.ai/code/session_01X91ErNfhphSw9gC1pqjjjN

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Takes upstream chattymin#252 (refresh on network reconnection), chattymin#263 (absolute reset
times) and chattymin#267 (floating pet size ceiling) as cherry-picks, all of which
applied cleanly.

From chattymin#279 takes only the claude-fable-5-1 price row. Without it the fable
family fallback applies Fable 5's $1.00 cache read instead of $0.25 and
overstates cost 4x. Verified by injection. The rest of that commit changes
how Codex total-only turns are counted, which is usage attribution rather
than pricing, and is left for a separate decision.

Declines chattymin#264 and chattymin#275, both with reasons that should stop them resurfacing.
chattymin#264 adds a second IV implementation to a model that already has one.
chattymin#275's help text is accurate, and independently confirms our own diagnosis of
the Keychain grant dying, but its remedy is the session key declined as chattymin#241.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@CallumAcorn
CallumAcorn merged commit 5d42d3a into main Sep 11, 2026
2 checks passed
@CallumAcorn
CallumAcorn deleted the upstream/reconnect-resets-pricing branch September 11, 2026 04:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants