codeburn/app/renderer
reviewer d0b02c00e6 payload: spend by pull request and by branch; desktop Pull requests tab
Part 1 (src): expose two add-only, optional aggregations on the menubar
payload's `current`, computed on the unscoped all-provider path from the
surviving-session parse (carried history cannot contribute, as expected).

- current.pullRequests: aggregateByPr rows (top 20 by cost) plus the
  multi-link-safe distinctCost/distinctSessions. Rows are by-reference, so
  they are never summed.
- current.byBranch: new aggregateByBranch, per-branch spend (top 15 by cost)
  that carries each session's last-seen git branch forward across its turns.
  The cache stores a turn's branch only when it changes, so the parser now
  resolves the branch at reconstruction (before the date slice) and records
  SessionSummary.everHadBranch from the full transcript. That lets the report
  keep a branch-bearing session's pre-branch spend in an explicit null row
  even when the range clipped the anchor turn, while a provider that never
  captures a branch still contributes nothing.

Part 2 (app): new "Pull requests" sidebar entry between Sessions and Spend
(shortcuts reflow to number 8 for Plans). It renders the pullRequests rows as
a refined table with the PR label linking out via openExternal, cost,
sessions, calls and an active-date span, plus a footnote stating the distinct
total and the by-reference attribution. A quiet explanatory line shows when no
PR links exist, never a fake table.

Tests: aggregateByBranch unit tests (carry-forward, null bucket, clipped
anchor, by-reference session counts) and the Pull requests component tests
(table, external link, footnote, both empty states). Nav-reflow assertions in
Sidebar and App tests updated.
2026-07-20 22:45:43 +02:00
..
assets brand: restore binary 0101 flame across all surfaces 2026-07-17 14:14:40 -07:00
components payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
hooks app: Download button direct-downloads the update asset (#777) 2026-07-20 10:02:43 -07:00
lib payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
sections payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
styles payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
test feat(app): refresh cadence, instant switching, cache coherence, telemetry v1 2026-07-16 11:47:05 -07:00
App.test.tsx payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
App.tsx payload: spend by pull request and by branch; desktop Pull requests tab 2026-07-20 22:45:43 +02:00
index.html harden(app): Electron security + spawn efficiency batch 2026-07-16 01:57:44 -07:00
main.tsx fix(app): zero background work when hidden; currency applies instantly 2026-07-16 18:41:28 -07:00
vite-env.d.ts feat(app): scaffold Electron+Vite package and codeburn CLI spawn 2026-07-10 15:16:55 -07:00