codeburn/tests
Matthew Kelch a5a0ddaeac
feat(copilot): read per-request input/cache from session-store.db
The Copilot CLI and the GitHub Copilot desktop app both write
~/.copilot/session-store.db unconditionally; its assistant_usage_events
table holds one row per API request. Until now input/cache tokens for
these surfaces came only from the session.shutdown rollups in
events.jsonl, which are written only on clean shutdown (a crash loses
the whole leg's input/cache accounting) and lump each session leg into
one per-model total. The rollup also RESETS its counters at in-session
compaction (traced on a clean single-process 107-request session whose
sole rollup covered exactly its five post-compaction requests), so even
cleanly-closed long sessions were truncated; on a long-history machine
the store recovered ~35% of real Copilot spend lost to crashes and
compaction resets. The DB rows are per-request, crash-proof, and carry
real timestamps.

The store's input_tokens is cache-INCLUSIVE (input + cache_read +
cache_write), the same convention as the shutdown rollups — verified
against each row's token_details_json and by reconciling per-session
sums against the CLI's own footers and rollups across two machines
(1,380+ rows, 8 models, CLI 1.0.70–1.0.79, schema_version 6): every
divergence was a rollup gap. Emitted calls mirror the shutdown-call
contract: input/cache/reasoning only, output 0 — per-turn output stays
owned by the events.jsonl assistant.message calls.

Rollup-vs-store precedence is RECONCILED at serve time, per
(session, model), and only there. Both representations always parse and
cache; parseProviderSources aggregates the cached calls and, wherever
store rows exist for a (session, model), drops the rollup calls and
serves the rows plus per-leg RESIDUAL calls: each rollup leg subtracts
only the rows in its own interval — rows commit strictly before their
leg's shutdown line, so a leg at time T covers exactly the rows in
(previous leg's T, T] — and any remainder (per token component, floored
at zero) serves once at that leg's own timestamp. A store missing
requests a leg covered — adopted mid-session, rows pruned before ever
being read — therefore still serves that tail exactly once ON THAT
LEG'S DAY, a crash-tail row the rollup never saw can never cancel it,
and a complete store serves pure per-request granularity with every
residual retired to zero. The decision reads only cached contents, never discovery:
deleting or resetting the store changes nothing served, so finalized
daily history can never flip on an absence epoch; cached rows of a
deleted store remain the record until the 90-day orphan age-out (which
exempts still-discovered paths). The serve set is the one coherent
snapshot — nothing a writer does between discovery and a parse can
change what one pass sees — and read-time precedence heals persisted
duplication (stale epochs, runtimes without node:sqlite, restored
files) instead of preserving it, following the buildDurablePeriod
pattern.

Store rows and rollups carry supplementary accounting weight. A rollup
(or its residual) is aggregate accounting, never a request: zero
api-call/model-call/turn weight, tokens and cost fully retained. A
store row is one real request, but when it pairs with a served per-turn
call it is supplementary too; rows pair with same-model per-turn calls
by timestamp adjacency (monotone matching, tight 2-minute window — the
two are written at the same completion moment, and a wide window would
let a crash-only row pair against a neighbor whose own row is missing),
computed once over the FULL serve set so a date-range boundary that
separates a row from its call cannot double the request across adjacent
day queries. Only the unpaired rows — store-only requests, exactly
where crash-lost requests sit — count. Supplementary-only turns fold
into the nearest behavioral turn within 30 minutes; with no behavioral
turn to fold into they stay separate weightless turns, each on its own
day, with apiCalls 0 — and the session emission gate admits
usage-bearing zero-call sessions. The weight
propagates into the daily cache: aggregateProjectsIntoDays applies the
same rule to every calls counter and category-turn count it seals, so
v19 history and live summaries can never disagree about what was a
request.

A changed source whose read defers on the busy shape (locked, EACCES,
corrupt mid-replace — discovery still emits the source; only true
absence or a schema mismatch reads as absent) now marks session
hydration incomplete, so the daily backfill holds its watermark instead
of finalizing a day the deferred rows never reached; an unchanged
unreadable store defers nothing. The verdict travels with its result —
the 180s memo and the serve burst-reuse restore the hydration verdict
their cached data was parsed under, so a memoized partial parse cannot
inherit a later parse's complete — and a discovered source whose
FINGERPRINT cannot be read (EACCES on a present file) defers instead of
silently skipping, while a genuinely deleted file stays a silent skip. Copilot reasoning tokens are no longer
double-billed at the report layer: they are a subset of the output the
per-turn calls already price, and copilot joins claude in the
reasoning-inside-output case of the query-time cost recompute.

Store dedup keys are content-discriminated —
copilot-store:<sid>:<rowId>:<fnv1a64(created_at|tokens|model)> —
because AUTOINCREMENT prevents id reuse only within one database
lifetime: a same-path DB reset reusing row ids now mints new keys
instead of the durable union swallowing the new usage, while a
byte-identical re-insert still collapses (64-bit: 32-bit FNV
collisions between plausible token tuples are constructible). Every
call of a session serves under one project label resolved at serve
time — the session-state-derived label when the serve set knows it,
else the store rows' own — so neither rows cached before events.jsonl
existed nor an events.jsonl orphaned by a session-state prune can
split the session across two grouping keys.

CODEBURN_COPILOT_SESSION_STORE_DB is read but deliberately NOT
fingerprinted, per the #927 ruling (any copilot fingerprint change
drops cached entries whose path still exists, destroying pruned history
only the cache holds); the read is allowlisted in the #927 guard, and
serve-time reconciliation makes repointing safe without a fingerprint —
the new store's rows parse on sight and the old path's entries persist
as durable orphans. The copilot parse version appends session-store-v2
and the daily cache bumps v17 → v19: per-day attribution, call counts
and costs all change against pre-store builds. 19, not 18: an earlier
pushed head of this PR already claimed v18 under different accounting,
and the carry-forward would adopt those days as finalized without
re-deriving them.

Verified by A/B on snapshots of two real stores, a live SIGKILL crash
test (row present, no rollup, tokens recovered exactly), live resumes
whose warm-cache deltas matched new rows to the token, upgrade-healing
at 4,800-session scale, and serve-level regressions pinning every
maintainer finding from six review rounds: the rows-then-shutdown race,
stale-cache healing, age-out exemption, absence-epoch identity,
progressive row landing with residual retirement, behavioral weight
across all four pinned scenarios, the hydration fence, project
unification in both directions, the same-path reset, mixed
coverage (crash tail vs covered-leg gap), multi-leg residual day
attribution, range-invariant pairing, memo-scoped hydration verdicts,
and the fingerprint-failure fence.
2026-08-17 17:52:01 -04:00
..
fixtures perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
providers feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
security fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
setup feat(providers): add cline-cli provider for Cline CLI sessions 2026-08-04 02:45:16 +03:00
sharing fix(sharing): answer malformed request URLs instead of crashing the server 2026-08-04 05:56:18 +03:00
act-journal.test.ts fix(guard): dedupe streaming message copies in the incremental cost fold 2026-07-03 12:32:46 +02:00
act-model-defaults.test.ts feat: implement act apply-model and report baseline tripwire (#607) (#616) 2026-07-16 11:10:08 -07:00
act-report.test.ts fix(act): dedup defer baselines against MCP rows, report pending honestly 2026-08-04 02:22:47 +03:00
act-undo.test.ts fix(act): support directory moves for archive actions 2026-07-03 10:14:48 +02:00
antigravity-statusline.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
audit-report.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
bash-commands.test.ts perf(classifier): linear bash separator split 2026-08-16 18:31:41 -07:00
blob-to-text.test.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
budget.test.ts feat(budget): spend budgets with overview display and scriptable --check (#562) 2026-07-16 11:10:16 -07:00
cache-dir.test.ts perf(desktop): share cache state and eliminate duplicate cold hydration 2026-08-12 17:16:41 +03:00
cache-directory-switch.test.ts perf(codex): resume an appended rollout from its last task boundary 2026-08-16 19:03:12 -07:00
cache-persistence-coldstart.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
cache-refresh-lock-corrupt-body.test.ts fix(cache): recover a corrupt session-refresh lock instead of freezing ingestion 2026-07-30 13:06:25 +05:30
cache-refresh-lock-process.test.ts fix(cache): recover a corrupt session-refresh lock instead of freezing ingestion 2026-07-30 13:06:25 +05:30
cache-refresh-lock.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
classifier.test.ts fix(insights): count read-shaped shell commands as reads, not as verification (#941) 2026-08-10 06:07:27 -07:00
cli-budget.test.ts feat(budget): spend budgets with overview display and scriptable --check (#562) 2026-07-16 11:10:16 -07:00
cli-codex-tps.test.ts feat(codex): add tool-excluded active throughput metrics 2026-07-24 22:53:43 -04:00
cli-date.test.ts feat(cli): add lifetime period for CLI and dashboard (#753) 2026-07-20 05:24:33 -07:00
cli-deepseek-v4-pricing.test.ts fix: DeepSeek v4 Claude pricing through stale runtime cache (#367) 2026-05-21 00:34:53 -07:00
cli-devin-model-variants.test.ts fix(devin): report friendly GPT model names with effort tier (#585) 2026-07-01 16:01:49 +02:00
cli-durable-totals.test.ts test: fix three pre-existing suite failures (aged date, future today fixture, load starvation) 2026-08-04 11:37:40 +02:00
cli-emitters.test.ts test: file-level 30s timeout for the three spawn-heavy CLI suites 2026-08-11 00:55:07 -07:00
cli-export-date-range.test.ts feat(export): support custom date ranges 2026-05-05 23:18:48 -07:00
cli-json-daily.test.ts test: file-level 30s timeout for the three spawn-heavy CLI suites 2026-08-11 00:55:07 -07:00
cli-model-savings.test.ts feat(cli): track local-model cost savings against a paid baseline (#421) 2026-06-01 11:06:39 +03:00
cli-plan.test.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
cli-price-override.test.ts feat(pricing): add user price overrides for models (#390) (#560) 2026-06-28 19:07:29 +02:00
cli-provider-validation.test.ts fix(cli): validate --provider and make non-TTY report deterministic (#501) 2026-06-18 12:39:22 +02:00
cli-proxy-path.test.ts test(cli-proxy-path): raise timeout for spawn-based tests to fix load flake (#504) 2026-06-18 12:57:44 +02:00
cli-refresh-help.test.ts Stabilize TUI refresh, scrolling, responsive layout, and dashboard data density (#863) 2026-08-09 03:39:19 +03:00
cli-settings-json.test.ts feat(cli): price-override --list --format json 2026-07-16 03:45:36 -07:00
cli-status-menubar.test.ts test: clamp all four relative-time fixtures to the current UTC day 2026-08-04 04:11:25 +03:00
codex-cache-invalidation.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
codex-credits.test.ts feat(codex): compute Codex credit usage (#408, #495) (#510) 2026-06-18 17:03:46 +02:00
codex-rich-capture.test.ts feat(capture): parse-time capture of branch, LOC deltas, interruptions, titles, PR links 2026-07-20 05:56:38 -07:00
codex-throughput.test.ts feat(codex): add tool-excluded active throughput metrics 2026-07-24 22:53:43 -04:00
compare-stats.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
content-utils.test.ts fix(parser): tolerate string message content; isolate per-file parse failures (#441) (#450) 2026-06-06 04:01:12 +02:00
context-budget-home.test.ts fix(context-budget): stop double-counting home skills and CLAUDE.md 2026-08-04 06:32:58 +03:00
context-tree-api-prefix.test.ts test: absorb the teardown write race in the context-tree API suite 2026-08-04 04:00:39 +03:00
context-tui-title.test.ts dashboard: Workflow panel, footer coaching notes, title-first context list 2026-07-20 22:26:50 +02:00
cross-provider-pr-correlation.test.ts fix(pr-attribution): time-bound working-directory correlation 2026-08-10 14:13:57 -07:00
currency-rounding.test.ts fix(currency): resolve RON symbol to "lei" across all surfaces 2026-07-06 03:43:03 +03:00
daily-cache-carry-forward.test.ts fix(daily-cache): trust a stamped watermark so an idle tail is not re-derived every launch 2026-08-01 23:07:22 +02:00
daily-cache-degraded-completeness.test.ts fix(daily-cache): trust a stamped watermark so an idle tail is not re-derived every launch 2026-08-01 23:07:22 +02:00
daily-cache-tz-dedup.test.ts fix(daily-cache): surgical tz-migration de-dup for carried days (#770) 2026-08-04 04:11:30 +03:00
daily-cache.test.ts fix(codex): validate rollouts structurally instead of by originator 2026-08-04 00:15:24 +03:00
dashboard.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
date-range-filter.test.ts Add multi-day calendar selection with custom popover UI (#393) 2026-05-24 09:49:59 -07:00
day-aggregator-savings.test.ts feat(cli): track local-model cost savings against a paid baseline (#421) 2026-06-01 11:06:39 +03:00
day-aggregator.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
defer-plans.test.ts feat(act): defer-* plan kinds for native deferral config (part 2 of #614) (#631) 2026-07-16 19:01:54 -07:00
devices-json.test.ts fix(cli): surface mDNS scan errors, robust spend-flow rollup + date label, harden tests 2026-07-10 16:20:41 -07:00
doctor.test.ts test(cache): make the round-2 review findings fail when broken 2026-08-05 05:58:17 +03:00
export.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
fetch-utils.test.ts fix(network): add timeouts to critical-path fetches (#445) (#448) 2026-06-06 03:25:36 +02:00
flat-slice.test.ts fix(parser): flatten already-sliced previews and memoize canonical path walks 2026-08-16 01:49:10 -07:00
format-carried-cost-note.test.ts fix(dashboard): label the day-count denominator, explain durable carry-forward 2026-07-29 23:02:05 +05:30
format-mark-estimated.test.ts fix(report): surface estimated costs distinctly (#688) 2026-07-16 10:46:21 -07:00
format-status-bar.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
fs-utils.test.ts Raise streaming session cap to 4GB so large Codex sessions are counted (#569) 2026-06-26 01:16:56 +02:00
granular-history.test.ts feat(dashboard): add granular session and model timelines (#673) 2026-07-16 03:04:54 -07:00
guard-hooks.test.ts feat(claude): account for /advisor escalations under the advisor model (#659) 2026-07-16 07:42:49 -07:00
guard-install.test.ts fix(guard): dedupe streaming message copies in the incremental cost fold 2026-07-03 12:32:46 +02:00
hydration-interrupt-convergence.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
ink-win.test.ts fix(ink-win): strip synchronized-update escapes instead of exact-matching them 2026-08-04 03:06:47 +03:00
kiro-cache-invalidation.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
kiro-projectpath.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
local-model-savings.test.ts feat(cli): track local-model cost savings against a paid baseline (#421) 2026-06-01 11:06:39 +03:00
mcp-coverage.test.ts Add MCP project profile advisor (#356) 2026-05-24 01:57:59 -07:00
mcp-deferral.test.ts feat(act): defer-* plan kinds for native deferral config (part 2 of #614) (#631) 2026-07-16 19:01:54 -07:00
mcp-redact.test.ts feat(dashboard): add granular session and model timelines (#673) 2026-07-16 03:04:54 -07:00
mcp-server.test.ts feat(mcp): get_usage + get_savings tools with annotations, schemas, coalescing 2026-06-02 02:16:10 -07:00
mcp-tables.test.ts feat(mcp): markdown table renderers for usage and savings 2026-06-02 02:13:51 -07:00
menubar-carried-headline.test.ts feat(insights): workflow intelligence (corrections, time-to-first-edit, file churn, coverage) + dash wire-up (#756) 2026-07-20 05:47:46 -07:00
menubar-installer.test.ts fix(menubar): retry mid-stream download drops and harden the retry budget 2026-08-04 00:09:04 +02:00
menubar-json.test.ts kimicode: discover desktop-runtime sessions and fix menubar visibility 2026-07-23 21:31:25 +02:00
menubar-report-parity.test.ts fix: hydration completeness markers, cold-only splash, honest switching, prefetch 2026-07-16 14:05:11 -07:00
menubar-savings.test.ts kimicode: discover desktop-runtime sessions and fix menubar visibility 2026-07-23 21:31:25 +02:00
minimax.test.ts chore(pricing): refresh LiteLLM snapshot; MiniMax-M3 standard tier 2026-07-02 06:17:01 +02:00
model-breakdown.test.ts models: resolve Fireworks-hosted models to friendly display names (#787) 2026-07-20 14:22:12 -07:00
model-efficiency.test.ts feat(report): add per-model efficiency metrics 2026-05-05 23:36:59 -07:00
models-hoist.test.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
models-report.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
models.test.ts fix(serve): close the resident-process staleness and growth holes 2026-08-10 10:03:33 -07:00
optimize-apply.test.ts fix(act): refuse to apply a plan whose target changed since it was built 2026-07-03 11:20:59 +02:00
optimize-fs.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
optimize-zero-edit-savings.test.ts optimize: bound zero-edit low-worth savings estimate to a recovery fraction (#640) (#691) 2026-07-16 11:09:44 -07:00
optimize.test.ts fix(insights): count read-shaped shell commands as reads, not as verification (#941) 2026-08-10 06:07:27 -07:00
otel-cache-aggregation.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
overview.test.ts feat(budget): spend budgets with overview display and scriptable --check (#562) 2026-07-16 11:10:16 -07:00
parse-workers.test.ts perf(parse-workers): gate on pending bytes, size the per-worker budget per parse 2026-08-17 02:53:19 -07:00
parser-advisor-usage.test.ts feat(claude): account for /advisor escalations under the advisor model (#659) 2026-07-16 07:42:49 -07:00
parser-antigravity-timestamp.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
parser-cache-refresh-timeout.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
parser-classify-after-slice.test.ts perf(parser): classify only the turns that survive the date slice 2026-08-17 00:09:38 -07:00
parser-claude-cwd.test.ts Show real Claude project leaf names; stop stray-.git over-grouping (#540) 2026-06-21 22:42:19 +02:00
parser-compact-entry.test.ts sessions: attribute PR spend per turn instead of per session (#790) 2026-07-20 20:44:29 -07:00
parser-estimated-cost.test.ts fix(report): surface estimated costs distinctly (#688) 2026-07-16 10:46:21 -07:00
parser-filter.test.ts test: cover filterProjectsByName include/exclude semantics 2026-04-16 15:49:57 -07:00
parser-gemini-cache.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
parser-hydration-lock.test.ts fix(cache): make the shard layout safe against a second live writer 2026-08-16 19:23:39 -07:00
parser-incremental-append.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
parser-large-json-scanner-parity.test.ts parser: dedupe the twin string/Buffer large-JSONL scanners (#698) 2026-07-16 12:23:06 -07:00
parser-large-json-scanner.test.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
parser-large-session.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
parser-local-savings.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
parser-mcp-inventory.test.ts feat(optimize): MCP tool coverage detector with cache-aware costing 2026-05-05 04:13:04 +03:00
parser-number-helpers.test.ts feat: add devin provider (#444) 2026-06-09 21:58:31 +02:00
parser-proxy-codex-only.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
parser-proxy-merge.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
parser-proxy-pricing.test.ts test: fix the five environment-sensitive failures the first ubuntu run exposed 2026-08-04 03:38:18 +03:00
parser-rich-capture.test.ts sessions: fold subagent runs into PR attribution (#791) 2026-07-20 20:47:23 -07:00
parser-single-pass-scanner.test.ts perf(parser): single-pass field extraction in the large-line JSONL scanner 2026-07-18 17:23:34 -07:00
parser-skip-line.test.ts Merge main into feat/multi-provider-plans, remove dead tautology 2026-05-16 10:42:03 -07:00
parser-subagent-collection.test.ts feat(report): Claude-scoped agent-type breakdown 2026-06-10 11:45:28 +02:00
parser-subagent-range.test.ts sessions: fold subagent runs into PR attribution (#791) 2026-07-20 20:47:23 -07:00
parser.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
plan-usage.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
plans.test.ts fix: fix and improve test isolation and collision with environment (#530) 2026-06-20 13:42:10 +02:00
pricing-fallback-data.test.ts feat(pricing): automatic gap-fill from models.dev and OpenRouter (#457) 2026-06-09 21:17:23 +02:00
project-filter-durable-totals.test.ts fix(menubar): apply --project/--exclude to the provider list on carried days 2026-08-04 02:09:03 +03:00
provider-env-declarations.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
provider-probe-roots-tier2.test.ts feat(doctor): probeRoots for six fixed-location providers (#899 Tier 2, batch 1) (#938) 2026-08-09 03:38:35 +03:00
provider-probe-roots.test.ts feat(doctor): probeRoots for 12 more providers (#899 Tier 1) 2026-08-04 03:28:59 +03:00
provider-registry.test.ts feat(openclaude): OpenClaude CLI provider (#213) 2026-08-04 04:05:25 +03:00
provider-turn-grouping.test.ts feat(providers): add cline-cli provider for Cline CLI sessions 2026-08-04 02:45:16 +03:00
quota.test.ts prerelease: quota NaN guard, 10-year daily retention, test date bomb (#764) 2026-07-20 07:37:56 -07:00
scan-progress.test.ts fix(parser): keep scan-progress out of the interactive dashboard and compare TUIs 2026-07-10 00:50:35 +02:00
serve-stdio.test.ts test(serve): pin the output memo to returning the stored string 2026-08-17 00:09:38 -07:00
session-cache-rich-capture.test.ts perf(cache): shard the session cache per provider 2026-08-16 19:03:12 -07:00
session-cache-shards.test.ts fix(cache): close three data-integrity holes in the month-shard layout 2026-08-17 00:42:39 -07:00
session-cache-v5-adoption.test.ts sessions: fold subagent runs into PR attribution (#791) 2026-07-20 20:47:23 -07:00
session-cache.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
sessions-by-branch.test.ts payload: spend by pull request and by branch; desktop Pull requests tab (#788) 2026-07-20 14:36:53 -07:00
sessions-by-pr.test.ts sessions: correlate cross-provider work with pull requests (#792) 2026-07-21 11:50:11 +02:00
sessions-report.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
sessions-subagent-fold.test.ts sessions: fold subagent runs into PR attribution (#791) 2026-07-20 20:47:23 -07:00
spend-flow.test.ts test: file-level 30s timeout for the three spawn-heavy CLI suites 2026-08-11 00:55:07 -07:00
sync-attribution-cli.test.ts fix(sync): address attribution review — cwd-fallback egress, Windows paths, PR-link validation 2026-08-02 12:29:18 +00:00
sync-attribution.test.ts fix(sync): close credential-leak paths; session retraction; span/key/CLI hardening 2026-08-02 12:56:59 +00:00
sync-e2e.test.ts fix(sync): address PR review — https enforcement, keychain test isolation, golden ID pins 2026-07-13 16:45:39 +00:00
sync-headless-e2e.test.ts fix(sync): address PR review — https enforcement, keychain test isolation, golden ID pins 2026-07-13 16:45:39 +00:00
sync-infra-e2e.test.ts test(sync): unit, mock-IdP e2e, and developer-only integration tests 2026-07-12 16:05:34 +00:00
sync-ledger-otlp.test.ts fix(desktop): close cache and lifecycle review gaps 2026-08-12 20:31:17 +03:00
sync-push.test.ts fix(sync): address PR review — https enforcement, keychain test isolation, golden ID pins 2026-07-13 16:45:39 +00:00
sync.test.ts chore(sync): HTML-escape callback page inputs 2026-07-26 07:05:44 -07:00
token-estimate.test.ts Extract shared token estimation helper, migrate all CHARS_PER_TOKEN sites (#644) (#677) 2026-07-16 11:58:22 -07:00
usage-aggregator-savings.test.ts feat(copilot): read per-request input/cache from session-store.db 2026-08-17 17:52:01 -04:00
usage-aggregator.test.ts feat(dashboard): add granular session and model timelines (#673) 2026-07-16 03:04:54 -07:00
web-dashboard.test.ts feat(dashboard): add granular session and model timelines (#673) 2026-07-16 03:04:54 -07:00
wheel-scroll.test.ts feat(tui): mouse-wheel scrolling for the dashboard viewport via SGR mouse reporting 2026-08-10 04:41:34 -07:00
workflow-insights.test.ts fix(insights): stop counting prose 'wrong answer' as a user correction 2026-08-10 04:45:52 -07:00
workflow-panel.test.ts fix(tui): floor pricing coverage so 100% means genuinely complete 2026-08-10 04:46:39 -07:00
yield-overlap-attribution.test.ts yield: single-owner commit attribution, ambiguous bucket, heuristic caveat (#692) 2026-07-16 13:09:26 -07:00
yield-repo-grouping.test.ts fix(yield): case-insensitive canonical repo grouping via realpathSync.native 2026-07-19 03:12:03 +03:00
yield.test.ts yield: single-owner commit attribution, ambiguous bucket, heuristic caveat (#692) 2026-07-16 13:09:26 -07:00