codeburn/src
iamtoruk 12c8cb7790 fix(copilot): re-derive migrated copilot day slices, count the compaction row's output
Two defects from @kelchm's two-machine validation of #946.

1. The daily-cache migration carried the copilot slice of every existing day
   entry verbatim instead of re-deriving it, so `overview` on a migrated cache
   kept serving pre-store numbers (2,980,804 tokens for a day whose fresh
   derivation is 74,811,412; 21,608 calls vs 16,326) while export/models/audit
   served the corrected ones off the same cache.

   Root cause is the partial-survival guard (e9d922ca), not the migration: it
   keeps a settled baseline slice whenever the fresh derivation reports FEWER
   calls, reading that as aged-out sources. This change's whole point is that
   copilot's supplementary accounting calls stop counting as api calls, so
   every store-era day shrinks in calls and got pinned to its pre-store value.
   The guard's own TRADE-OFF note predicted exactly this case.

   A migration from an older cache version now grants copilot ONE
   guarded-shrink-exempt re-derivation (`pendingRederive`), spent by the first
   COMPLETE parse. It fires only where that parse actually produced a slice for
   the (day, provider), so a day whose sources are gone still carries forward
   whole - never-lose is unchanged in both directions - and no other provider
   is exempt.

   The daily cache moves 21 -> 25: 21-24 landed on main during validation, and
   only a number the validators' own daily-cache.v21.json cannot claim gets
   their stale carried slices re-derived.

2. The `initiator='compaction'` store row was ingested with outputTokens 0. Its
   output has no assistant.message anywhere in events.jsonl, so that row is the
   only place those tokens exist - dropping them was the sole token discrepancy
   (-3,085) across a 30-session store-matched comparison. It is now read (on the
   same optional-select rung as `initiator`, which is what identifies the row),
   counted and priced; every other row keeps output 0 because a per-turn call
   owns it. The copilot parse version moves to session-store-v3 so cached v2
   rows re-parse; the dedup key is deliberately unchanged.

Settle window stays at 24 h - the three-machine evidence for tightening it is
recorded next to the constant, but shortening it is a product call.
2026-08-22 02:26:35 -07:00
..
act merge origin/main into pr994 2026-08-18 08:50:09 -07:00
data chore: bump to 0.9.20 2026-08-10 15:38:47 -07:00
guard feat(claude): account for /advisor escalations under the advisor model (#659) 2026-07-16 07:42:49 -07:00
mcp fix(report): surface estimated costs distinctly (#688) 2026-07-16 10:46:21 -07:00
providers fix(copilot): re-derive migrated copilot day slices, count the compaction row's output 2026-08-22 02:26:35 -07:00
sharing fix(sharing): answer malformed request URLs instead of crashing the server 2026-08-04 05:56:18 +03:00
sync fix(copilot): re-derive migrated copilot day slices, count the compaction row's output 2026-08-22 02:26:35 -07:00
antigravity-statusline.ts perf(desktop): share cache state and eliminate duplicate cold hydration 2026-08-12 17:16:41 +03:00
audit-report.ts Merge origin/main into feat/copilot-session-store-landing 2026-08-19 12:29:33 -07:00
bash-utils.ts perf(classifier): linear bash separator split 2026-08-16 18:31:41 -07:00
behavioral-weight.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
budget.ts feat(budget): spend budgets with overview display and scriptable --check (#562) 2026-07-16 11:10:16 -07:00
cache-dir.ts perf(desktop): share cache state and eliminate duplicate cold hydration 2026-08-12 17:16:41 +03:00
cache-refresh-lock.ts perf(desktop): share cache state and eliminate duplicate cold hydration 2026-08-12 17:16:41 +03:00
classifier.ts fix(insights): count read-shaped shell commands as reads, not as verification (#941) 2026-08-10 06:07:27 -07:00
cli-date.ts feat(cli): add lifetime period for CLI and dashboard (#753) 2026-07-20 05:24:33 -07:00
cli.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
codex-cache.ts Fix Codex model attribution after session metadata 2026-08-19 14:49:04 +02:00
codex-credits.ts feat(codex): compute Codex credit usage (#408, #495) (#510) 2026-06-18 17:03:46 +02:00
codex-throughput.ts feat(codex): add tool-excluded active throughput metrics 2026-07-24 22:53:43 -04:00
compare-stats.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
compare.tsx fix(compare): honor --model-a/--model-b in the TUI and resolve display names 2026-07-29 22:58:05 +05:30
config.ts feat(budget): spend budgets with overview display and scriptable --check (#562) 2026-07-16 11:10:16 -07:00
content-utils.ts fix(parser): flatten already-sliced previews and memoize canonical path walks 2026-08-16 01:49:10 -07:00
context-budget.ts fix(context-budget): stop double-counting home skills and CLAUDE.md 2026-08-04 06:32:58 +03:00
context-tree-codex.ts Extract shared token estimation helper, migrate all CHARS_PER_TOKEN sites (#644) (#677) 2026-07-16 11:58:22 -07:00
context-tree.ts Extract shared token estimation helper, migrate all CHARS_PER_TOKEN sites (#644) (#677) 2026-07-16 11:58:22 -07:00
context-tui.tsx dashboard: Workflow panel, footer coaching notes, title-first context list 2026-07-20 22:26:50 +02:00
currency.ts test: skip the live Frankfurter fetch so FX moves can't shift assertions 2026-08-21 02:23:41 -07:00
cursor-cache.ts perf(desktop): share cache state and eliminate duplicate cold hydration 2026-08-12 17:16:41 +03:00
daily-cache.ts fix(copilot): re-derive migrated copilot day slices, count the compaction row's output 2026-08-22 02:26:35 -07:00
dashboard.tsx Merge remote-tracking branch 'origin/main' into feat/copilot-session-store-landing 2026-08-19 13:25:33 -07:00
day-aggregator.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
doctor.ts test(cache): make the round-2 review findings fail when broken 2026-08-05 05:58:17 +03:00
export.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
fetch-utils.ts fix(network): add timeouts to critical-path fetches (#445) (#448) 2026-06-06 03:25:36 +02:00
format.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
fs-utils.ts feat(copilot): track GitHub Copilot JetBrains IDE usage 2026-07-03 16:11:27 +05:30
granular-history.ts fix(dash): keep the disambiguator visible, make the bootstrap safe by construction 2026-08-18 05:49:16 +03:00
ink-win.ts fix(ink-win): strip synchronized-update escapes instead of exact-matching them 2026-08-04 03:06:47 +03:00
main.ts Merge origin/main into feat/copilot-session-store-landing 2026-08-19 12:29:33 -07:00
menubar-installer.ts menubar: install and launch the Windows tray app from codeburn menubar 2026-08-18 06:55:09 -07:00
menubar-json.ts kimicode: discover desktop-runtime sessions and fix menubar visibility 2026-07-23 21:31:25 +02:00
model-breakdown.ts feat(codex): add tool-excluded active throughput metrics 2026-07-24 22:53:43 -04:00
model-efficiency.ts fix(devin): report friendly GPT model names with effort tier (#585) 2026-07-01 16:01:49 +02:00
models-report.ts Merge origin/main into feat/copilot-session-store-landing 2026-08-19 12:29:33 -07:00
models.ts test: price off the bundled snapshot so upstream reprices can't turn tests red 2026-08-21 02:21:31 -07:00
optimize.ts parser: keep promptSource on lines over 32 KB 2026-08-18 12:00:29 -07:00
overview.ts fix(aggregator): apply --project/--exclude to the durable headline 2026-07-31 19:32:02 +08:00
parse-worker.ts perf(parse-workers): gate on pending bytes, size the per-worker budget per parse 2026-08-17 02:53:19 -07:00
parse-workers.ts perf(parse-workers): gate on pending bytes, size the per-worker budget per parse 2026-08-17 02:53:19 -07:00
parser.ts Merge origin/main, and act on vidoluco's real-Copilot findings 2026-08-21 02:14:14 -07:00
persistent-codeburn.ts refactor(cli): share persistent-codeburn resolver; tighten Antigravity hook ownership 2026-05-31 20:07:57 -07:00
plan-usage.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
plans.ts feat(providers): add Grok Build provider (#521) 2026-06-19 17:21:41 +02:00
quota.ts prerelease: quota NaN guard, 10-year daily retention, test date bomb (#764) 2026-07-20 07:37:56 -07:00
serve.ts fix(serve): close review follow-ups on the shared-cache PR 2026-08-16 18:29:11 -07:00
session-cache.ts fix(copilot): re-derive migrated copilot day slices, count the compaction row's output 2026-08-22 02:26:35 -07:00
session-population.ts fix(optimize): isolate sidechains from behavior 2026-08-14 02:51:54 +05:30
sessions-report.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
sessions-tui.tsx feat(cli): add interactive sessions browser (#793) 2026-07-21 13:03:47 +02:00
spend-flow.ts fix(cli): surface mDNS scan errors, robust spend-flow rollup + date label, harden tests 2026-07-10 16:20:41 -07:00
sqlite.ts fix(sqlite): only reach for an immutable URI where node:sqlite honours one 2026-08-18 10:38:01 -07:00
text-table.ts feat(devices): joined Totals by machine report (#536) 2026-06-20 19:23:03 +02:00
token-estimate.ts Extract shared token estimation helper, migrate all CHARS_PER_TOKEN sites (#644) (#677) 2026-07-16 11:58:22 -07:00
types.ts Merge origin/main into feat/copilot-session-store-landing 2026-08-19 12:29:33 -07:00
usage-aggregator.ts Merge origin/main into feat/copilot-session-store-landing 2026-08-19 12:29:33 -07:00
web-dashboard.ts fix(dash): keep the disambiguator visible, make the bootstrap safe by construction 2026-08-18 05:49:16 +03:00
workflow-insights.ts fix(optimize): isolate sidechains from behavior 2026-08-14 02:51:54 +05:30
yield.ts fix(sync): close credential-leak paths; session retraction; span/key/CLI hardening 2026-08-02 12:56:59 +00:00