Opus 4.5 day: OAuth email normalize, Telegram thread fallback (#4911)

Signal
104 sessions on investor-research, 251 minutes, $45.49: Opus 4.5 replaced Sonnet on this day 62 openclaw commits, +3,974 / -1,118: tighter than yesterday’s churn, more surgical Top features: OAuth profile-email normalization, Telegram thread delivery-fallback (#4911), token normalization for Telegram account lookup (#5055)
Evidence
investor-research: 104 sessions, 251 minutes, $45.49 cost
Model mix: Opus 4.5 across the top five log entries (5,687 / 5,322 / 4,011 / 3,043 / 9,856 tokens)
openclaw: 62 commits, +3,974 / -1,118, net +2,856 lines
OAuth: normalize profile email: duplicate identities being created from case/whitespace drift in the email field
fix: preserve delivery thread fallback (#4911) (thanks @yevhen) and Fix telegram threadId in deliveryContext: two-commit fix on the thread-id delivery pipeline
fix: normalize telegram account token lookup (#5055) (thanks @jasonsschin): contributor fix, accepted
Tests: update pi SDK mocks: ripple from the Raspberry Pi deployment guide landing earlier in the week
The token windows on Opus (5K to 10K) are an order of magnitude smaller than yesterday’s Sonnet 4.5 windows (37K to 114K). That is the clearest possible visual of a reasoning-over-throughput swap. Opus chews on smaller contexts more carefully; Sonnet blasts through larger ones faster.
So What
This is an Opus 4.5 day. The shift from 595 Sonnet minutes yesterday to 251 Opus minutes today reads as a reasoning-over-throughput swap: fewer calls, same cost. The commit pattern matches: 62 tighter commits vs 39 sweeping ones. Two community PRs landed back-to-back, both on Telegram identity/threading. The identity-normalization theme (emails, tokens, threadIds) ran through five of the top commits.
OAuth email normalization is a quiet but consequential fix. When the email field drifts in case or whitespace, the same user can show up twice under different profile IDs. Everything downstream (billing, history, permissions) assumes profile ID is stable. Case-insensitive normalization at profile creation time is the right place to fix it, but it does not retroactively merge profiles that already diverged. Those need a separate merge pass.
The #4911 thread-fallback work is the kind of fix that looks small but unlocks retries. If the primary delivery path fails and there is no fallback thread, the message is dropped. With the fallback preserved, delivery degrades rather than disappearing. Yevhen caught the entry point; my commit fixed where threadId was being reset in deliveryContext after the fallback logic had set it correctly.
Jasonsschin’s token normalization (#5055) completes the identity sweep: emails, thread IDs, and now tokens all get normalized before comparison. Three different identity layers, three different normalization paths, all fixed in the same week.
What’s Next
Three identity layers got normalized today: OAuth emails, Telegram tokens, thread-ids. Is a unified identity-coerce module worth extracting, or are these different enough that shared code hurts? My guess: extract when a fourth shows up. Three points is a line; four is a shape worth abstracting.
The Pi SDK mocks update is a canary: if more Pi-related test drift shows up in the next week, the Pi guide is pulling users in and they are finding edges I did not test. If not, the guide landed clean. Mock updates usually track user-reported reality; if the mock was stale, the test was lying, and the only way that surfaces is when a real Pi user runs into the gap. The net +2,856 lines on 62 commits averages under 50 lines per commit, which is the right shape for identity-normalization fixes: small, focused, each addressing one exact drift point. That is the signature of mature maintenance.
Log
- Sessions: 104 across 1 projects, 251m total
- Top projects: investor-research (251m)
- Commits: 62 across 1 repos (3974 +, 1118 -)
- Top repo: openclaw
- Cost: $45.49