Found by a repo-wide simplification audit; re-verified with git grep -aI.
The v2 usage query surface is unreachable from the shipped app:
apps/desktop/src/main/runtime-host-usage-ipc-main.ts registers six channels (usage:summary, usage:buckets, usage:logs, usage:pricing:list|put|reset) and they are the only 6 of the app's 191 IPC handlers with zero preload exposure and zero renderer callers.
usage:pricing:changed is the only main-process send() in the whole app with no listener.
- The shipped Usage settings page uses the v1 path instead:
settings-store scan-aggregation via runtime-host-boot.ts → usage-settings-page.tsx.
Related architecture context: usage metering is currently double-written (recordLlmCall legacy writer vs recordModelCallAttempt canonical, merged at query time by usage-ledger-merge), with Host auxiliary calls (memory extraction, Daily Review, title/recap) still on the legacy writer.
Question (go/stop): is the orphan IPC surface the half-landed renderer side of a new Usage page (if so — progress check), or should the v2 query surface be removed until a consumer exists? Deciding which ledger is the long-term authority for auxiliary Host calls is a separate architecture decision this issue only flags.
Found by a repo-wide simplification audit; re-verified with
git grep -aI.The v2 usage query surface is unreachable from the shipped app:
apps/desktop/src/main/runtime-host-usage-ipc-main.tsregisters six channels (usage:summary,usage:buckets,usage:logs,usage:pricing:list|put|reset) and they are the only 6 of the app's 191 IPC handlers with zero preload exposure and zero renderer callers.usage:pricing:changedis the only main-processsend()in the whole app with no listener.settings-storescan-aggregation viaruntime-host-boot.ts→usage-settings-page.tsx.Related architecture context: usage metering is currently double-written (
recordLlmCalllegacy writer vsrecordModelCallAttemptcanonical, merged at query time byusage-ledger-merge), with Host auxiliary calls (memory extraction, Daily Review, title/recap) still on the legacy writer.Question (go/stop): is the orphan IPC surface the half-landed renderer side of a new Usage page (if so — progress check), or should the v2 query surface be removed until a consumer exists? Deciding which ledger is the long-term authority for auxiliary Host calls is a separate architecture decision this issue only flags.