feat(export): add combined project, model and agent reporting - #1713
feat(export): add combined project, model and agent reporting#1713wesm wants to merge 2 commits into
Conversation
Independent project, model and agent totals cannot answer combined filters. Add opt-in reporting v3 with session-free five-minute cells, cost provenance and project-key selection. Use the shared Activity interval engine so these facts follow the same activity rules as the report. Select usage survivors and allocate authoritative costs before filtering projects. Bind complete cell sets and scope into each hour digest so late corrections replace prior usage instead of adding another charge. Retain the device bucket peak to keep aggregate concurrency bounds useful. Keep existing v1/v2 contracts and the v2 default unchanged. Document the replacement and precision limits, and measure the extra aggregation and payload cost with a synthetic SQLite benchmark.
roborev: Combined Review (
|
Reporting integrations need to choose their time precision without changing the hourly publication cadence. Accept whole-minute durations that divide an hour, declare the resolution in v3 documents and bind it to their content identity. Preserve the v1/v2 bytes and the independent inactivity-gap rule. Keep standalone usage unattributed even when a real session has an empty project label. A missing session must not borrow that project's identity or contribute to its scoped totals. Compare one- and five-minute exports on the same synthetic archives so finer precision has a measured aggregation and payload cost.
roborev: Combined Review (
|
Reporting exports can preserve project, model and agent relationships at a chosen time resolution. Separate breakdowns cannot answer questions such as “how much did this model cost on this project?” Opt-in reporting schema 3 supplies those combined facts without session identifiers, messages or tool content.
--project-keyselection and--bucket, such as1m,5mor15m. Any positive whole-minute duration that divides an hour is valid. Five minutes remains the default; v3 documents declarebucket_seconds. Versions 1 and 2 keep their original bytes and digests, and version 2 remains the default schema.The synthetic SQLite benchmark compares one- and five-minute exports with overlapping sessions, model switches and two project counts. This adds aggregation and payload cost, not incremental history discovery: digest screening still computes full day exports.
Focused reporting checks, package checks, vet, lint and the documentation build pass. The broader short suite still has the three previously reproduced base failures in IPv6 artifact exchange and OpenCode sync; this change does not address them.