fix(usage): model shares and order follow the selected metric - #11391
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped usage-display fix that derives token shares and keeps model shares, values, and mobile ordering aligned with the selected metric. The shared change is additive, existing cost behavior is preserved, and targeted tests cover the new calculations. You can add or adjust custom eligibility rules. Learn more. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (6)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughModel totals now include token shares. The web and mobile usage breakdowns select model shares, values, and ordering according to the active cost or token metric. The mobile view retains its unpriced display in cost mode. ChangesUsage metric reporting
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The metric-specific model shares appear ready to merge after normal checks. Mobile simulator rendering remains unverified, but no concrete rendering failure is established. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The change is focused on percentage calculation and display. No expansion of data access or permissions was identified. Integration risk is limited to the shared value and its consumers. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
Full details: Description checkExplanation The description explains the problem, the web and mobile changes, and focused verification. It does not provide the required scope-and-approval information, and it notes that mobile screenshots were not captured despite changes to the mobile UI. Resolution Add the triaged issue or maintainer approval comment that establishes the change's scope. If this is an obvious bug fix that needs no prior approval, explain why. Add clear before-and-after screenshots for the mobile UI, or state why screenshots cannot be provided and include suitable evidence of the change.
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Independent validation of Checked 36 usage combinations with two distinct transcript sources plus a duplicate of the first source. The token-share denominator stayed deduplicated; unpriced model tokens retained their share independently of cost; zero-token cases returned finite zero shares. The same model aggregated correctly across distinct sources. This tests the shared merge logic only, not the web/mobile presentation. Reproduction scripts and recorded results — Model: GPT-6. Harness: Codex. |
773d9fe to
5ea5b5b
Compare
Dismissing prior approval to re-evaluate 5ea5b5b
## What's Changed * feat(web): Nightly tells you to get the beta mobile app by @t3dotgg in pingdotgg/t3code#15070 * test(server): ACP adapter tests no longer race the prompt settle by @t3dotgg in pingdotgg/t3code#15330 * feat(usage): fold preview model IDs into the model they belong to by @t3dotgg in pingdotgg/t3code#15333 * refactor(server): check RPC scopes in group middleware by @juliusmarminge in pingdotgg/t3code#15324 * feat(mobile): beta Working section hides busy threads until they need you by @t3dotgg in pingdotgg/t3code#15346 * fix(settings): symlinked settings files stay linked when saved by @yordis in pingdotgg/t3code#15009 * fix(server): Stop ends a dev server left running before a provider switch by @t3dotgg in pingdotgg/t3code#15355 * fix(server): merged threads settle even after the agent wakes on its own by @t3dotgg in pingdotgg/t3code#15388 * fix(web): no-project drafts can switch machines by @maria-rcks in pingdotgg/t3code#15356 * fix(web): highlight tool inputs and remove nested work log indentation by @Yash-Singh1 in pingdotgg/t3code#15384 * fix(server): restarts keep delegated tasks, queued threads, and stops intact by @maria-rcks in pingdotgg/t3code#15323 * fix(web): sending past the resume banner compacts first by @maria-rcks in pingdotgg/t3code#15290 * fix(codex): resume archived native sessions by @maria-rcks in pingdotgg/t3code#15389 * feat(web): morph composer and panel action icons by @jakeleventhal in pingdotgg/t3code#14924 * fix(web): subagents sent a follow-up show as running in Lineage by @scratchyone in pingdotgg/t3code#15334 * fix(web): clear stale chat action shortcuts by @maria-rcks in pingdotgg/t3code#15394 * fix(orchestration-v2): restore earlier app agent transcript pages by @Bil0000 in pingdotgg/t3code#14104 * fix(web): remove the square thread info panel shadow by @PixPMusic in pingdotgg/t3code#15069 * fix(mobile): Android usage widget no longer sticks on "Loading widget" in release builds by @tris203 in pingdotgg/t3code#15142 * fix(web): size the model picker to its content by @saphid in pingdotgg/t3code#15152 * test(server): replay checks a Claude subagent's thread takes its reported model by @juliusmarminge in pingdotgg/t3code#15022 * fix(web): subagent finish notifications look like subagent cards by @flamboh in pingdotgg/t3code#15281 * fix(web): thread status dot has an accessible name by @ryanilano in pingdotgg/t3code#14587 * fix(web): legacy sidebar options button has a label by @ryanilano in pingdotgg/t3code#14602 * fix(web): imported themes keep switches and focus rings visible by @flamboh in pingdotgg/t3code#14498 * fix(web): links to issues no longer strand the pull request viewer by @flamboh in pingdotgg/t3code#14242 * fix(web): repo/task breadcrumb no longer bounces when the sidebar collapses by @flamboh in pingdotgg/t3code#15046 * fix(web): Pull request panel entry works for linked PRs by @flamboh in pingdotgg/t3code#15061 * fix(web): add context menu to draft threads in the sidebar by @flamboh in pingdotgg/t3code#10637 * fix(web): keep sidebar branding and build pills from clipping at varying font sizes and zoom levels by @flamboh in pingdotgg/t3code#12141 * fix(usage): model shares and order follow the selected metric by @flamboh in pingdotgg/t3code#11391 * feat(web): sweep sidebar buttons to settle, un-settle, and wake threads by @argofowl in pingdotgg/t3code#14768 * feat: retry a failed workspace preparation by @juliusmarminge in pingdotgg/t3code#15326 ## New Contributors * @argofowl made their first contribution in pingdotgg/t3code#14768 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261003.2638...v0.0.46-nightly.20261004.2644 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2644
## What's Changed * feat(web): Nightly tells you to get the beta mobile app by @t3dotgg in pingdotgg/t3code#15070 * test(server): ACP adapter tests no longer race the prompt settle by @t3dotgg in pingdotgg/t3code#15330 * feat(usage): fold preview model IDs into the model they belong to by @t3dotgg in pingdotgg/t3code#15333 * refactor(server): check RPC scopes in group middleware by @juliusmarminge in pingdotgg/t3code#15324 * feat(mobile): beta Working section hides busy threads until they need you by @t3dotgg in pingdotgg/t3code#15346 * fix(settings): symlinked settings files stay linked when saved by @yordis in pingdotgg/t3code#15009 * fix(server): Stop ends a dev server left running before a provider switch by @t3dotgg in pingdotgg/t3code#15355 * fix(server): merged threads settle even after the agent wakes on its own by @t3dotgg in pingdotgg/t3code#15388 * fix(web): no-project drafts can switch machines by @maria-rcks in pingdotgg/t3code#15356 * fix(web): highlight tool inputs and remove nested work log indentation by @Yash-Singh1 in pingdotgg/t3code#15384 * fix(server): restarts keep delegated tasks, queued threads, and stops intact by @maria-rcks in pingdotgg/t3code#15323 * fix(web): sending past the resume banner compacts first by @maria-rcks in pingdotgg/t3code#15290 * fix(codex): resume archived native sessions by @maria-rcks in pingdotgg/t3code#15389 * feat(web): morph composer and panel action icons by @jakeleventhal in pingdotgg/t3code#14924 * fix(web): subagents sent a follow-up show as running in Lineage by @scratchyone in pingdotgg/t3code#15334 * fix(web): clear stale chat action shortcuts by @maria-rcks in pingdotgg/t3code#15394 * fix(orchestration-v2): restore earlier app agent transcript pages by @Bil0000 in pingdotgg/t3code#14104 * fix(web): remove the square thread info panel shadow by @PixPMusic in pingdotgg/t3code#15069 * fix(mobile): Android usage widget no longer sticks on "Loading widget" in release builds by @tris203 in pingdotgg/t3code#15142 * fix(web): size the model picker to its content by @saphid in pingdotgg/t3code#15152 * test(server): replay checks a Claude subagent's thread takes its reported model by @juliusmarminge in pingdotgg/t3code#15022 * fix(web): subagent finish notifications look like subagent cards by @flamboh in pingdotgg/t3code#15281 * fix(web): thread status dot has an accessible name by @ryanilano in pingdotgg/t3code#14587 * fix(web): legacy sidebar options button has a label by @ryanilano in pingdotgg/t3code#14602 * fix(web): imported themes keep switches and focus rings visible by @flamboh in pingdotgg/t3code#14498 * fix(web): links to issues no longer strand the pull request viewer by @flamboh in pingdotgg/t3code#14242 * fix(web): repo/task breadcrumb no longer bounces when the sidebar collapses by @flamboh in pingdotgg/t3code#15046 * fix(web): Pull request panel entry works for linked PRs by @flamboh in pingdotgg/t3code#15061 * fix(web): add context menu to draft threads in the sidebar by @flamboh in pingdotgg/t3code#10637 * fix(web): keep sidebar branding and build pills from clipping at varying font sizes and zoom levels by @flamboh in pingdotgg/t3code#12141 * fix(usage): model shares and order follow the selected metric by @flamboh in pingdotgg/t3code#11391 * feat(web): sweep sidebar buttons to settle, un-settle, and wake threads by @argofowl in pingdotgg/t3code#14768 * feat: retry a failed workspace preparation by @juliusmarminge in pingdotgg/t3code#15326 ## New Contributors * @argofowl made their first contribution in pingdotgg/t3code#14768 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261003.2638...v0.0.46-nightly.20261004.2644 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2644
Note
🤖 Claude Opus 5.5 on behalf of Oliver
Problem
The Usage page's metric toggle switches provider shares between cost and tokens, but model shares always showed cost shares.
ModelTotalsonly carriedcostShare. In Tokens mode the web model table's Share column showed each model's share of cost, for example 50.8% next to a model holding a fifth of the tokens. Mobile's "By model" list always showed "% of cost" and kept its cost ordering.Fix
mergeUsagenow derivestokenSharefor each model, matchingProviderTotals.modelShare(model, metric)helper inusageBreakdown.tspicks the share for the selected metric. The table already sorts by tokens in Tokens mode (feat(usage): show cost by token type, speed, and model detail #15108), so only the Share column changes. Cost mode still leaves the share blank for a model with unknown cost. In Tokens mode an unpriced model shows its real token share.Before / After
Web Usage page, Tokens metric, Model breakdown (real local usage history):
Before: Share is cost share, so it jumps around in a list sorted by tokens.

After: Share is token share and falls down the list. The unpriced

codex-auto-reviewshows its 1.7%.Mobile was not captured. It uses the same shared
tokenShareand the existing provider-row pattern.Verification
vp test run packages/shared/src/usageMerge.test.ts apps/web/src/components/usage/usageBreakdown.test.ts: model token shares are independent of cost shares, andmodelSharefollows the metric, including unpriced models.tsc --noEmitforpackages/shared,apps/web,apps/mobile.Rebuilt from scratch on current
main. The previous version conflicted after #15108 and the v2 merge, and usedrenderToStaticMarkuptests.Made by Claude Opus 5.5 in Claude Code (via T3 Code).