Deferred from: add-time-bucket-aggregation (see openspec/changes/add-time-bucket-aggregation/proposal.md Non-goals).
The first cut emits one bucket value per date_trunc group. Dashboards commonly want running totals (cumulative count, rolling avg). Out of scope because:
- Postgres path needs window functions (
SUM(...) OVER (ORDER BY bucket)) — non-trivial composition with the RBAC predicate.
- PHP fallback would need a separate accumulation pass.
- Solr / ES handle this via
cumulative_sum pipelines (ES) or stats + post-processing — different translator surface.
Scope when picked up:
- New optional
AggregationQuery::window: { type: 'cumulative' | 'rolling', size?: int }.
- Postgres window-function emission in
tryNativeAggregation().
- PHP polyfill in the fallback path.
- GraphQL:
GroupByInput.window: WindowInput.
- REST: query params
window=cumulative / window=rolling&windowSize=7.
Deferred from:
add-time-bucket-aggregation(seeopenspec/changes/add-time-bucket-aggregation/proposal.mdNon-goals).The first cut emits one bucket value per
date_truncgroup. Dashboards commonly want running totals (cumulative count, rolling avg). Out of scope because:SUM(...) OVER (ORDER BY bucket)) — non-trivial composition with the RBAC predicate.cumulative_sumpipelines (ES) orstats+ post-processing — different translator surface.Scope when picked up:
AggregationQuery::window: { type: 'cumulative' | 'rolling', size?: int }.tryNativeAggregation().GroupByInput.window: WindowInput.window=cumulative/window=rolling&windowSize=7.