Phase 4
Time window

Source: c128 Reports — Phase 1, 2026-11-03 · design-local, headed for the layer (D9)

The one time control in qdash. Reports and operator pages share a single window (D5). It can be a rolling window, a calendar period or a custom from–to range. It's compared with the previous period by default (D4), read in the org's timezone (D10), and set to the last 30 days unless chosen otherwise. Operator pages show it as the when: pill; a report writes it out in full. Days before the data begins are hatched (R6), and the window lives in the URL (R5).

One window, two faces

Both of these read the page's URL, so changing either one changes the other. That's how a report and the operator page behind one of its sections stay on the same days. Try a preset, then a custom range, then the back button.

An operator page's filter bar
Security · PosturePosture report
Last 30 days· compared with Sep 4 – Oct 3, 2026· PT
URL
/pages/phase4/time-window
Window
2026-10-04 → 2026-11-02 · 30 days · coverage full
Compared with
2026-09-04 → 2026-10-03 · the previous 30 days
Bakeable (c113)
yes: a named window

The panel, open

The same panel the pill and the report line open, laid flat here so it can be reviewed against each world it has to be honest in. Each scenario keeps its own window.

The seed backend keeps 90 days of trends. The default window, the last 30 days compared with the 30 before, fits inside it.

Data from Aug 5, 2026 through Nov 2, 2026 · America/Los_Angeles

Last 30 days· compared with Sep 4 – Oct 3, 2026· PT
Rolling
Calendar
Everything
November 2026

no datacompared withData from Aug 5, 2026 through Nov 2, 2026 · 90 days · PT

Compare with
Sep 4 – Oct 3, 2026 · the previous 30 days
Oct 4 – Nov 2, 2026 · 30 days

Every window, resolved

Every preset in the qdash today world, as the model resolves it. These are the numbers scripts/c128-time-window-check.mts asserts. Grey means the comparison isn't offered.

PillDatesDaysPrevious periodA year earlierURL
Last 24 hoursNov 2, 2026 24 hNov 1, 2026 the 24 hours beforenot offeredperiod=24h
Last 7 daysOct 27 – Nov 2, 2026 7Oct 20 – 26, 2026 the previous 7 daysnot offeredperiod=7d
Last 30 daysOct 4 – Nov 2, 2026 30Sep 4 – Oct 3, 2026 the previous 30 daysnot offered(default)
Last 90 daysAug 5 – Nov 2, 2026 90May 7 – Aug 4, 2026 the previous 90 days · no datanot offeredperiod=90d
November 2026 to dateNov 1 – 2, 2026 2Oct 1 – 2, 2026 the same days of last monthnot offeredperiod=this-month
October 2026Oct 1 – 31, 2026 31Sep 1 – 30, 2026 the month beforenot offeredperiod=last-month
Q4 2026 to dateOct 1 – Nov 2, 2026 33Jul 1 – Aug 2, 2026 the same days of last quarter · no datanot offeredperiod=this-quarter
Q3 2026Jul 1 – Sep 30, 2026 35 days hatched92Apr 1 – Jun 30, 2026 the quarter before · no datanot offeredperiod=last-quarter
2026 to dateJan 1 – Nov 2, 2026 216 days hatched306Jan 1 – Nov 2, 2025 the same days of last year · no datanot offeredperiod=ytd
All timeAug 5 – Nov 2, 2026 90—not offeredperiod=all

Rules and calls

  • Last 24 hours and All time stay. Because the window is shared (D5), operators keep the two windows the old pill had. A report can use them too, though it rarely will. All time has nothing before it, so it compares with nothing.
  • Comparing a to-date period. "This month" on Nov 2 compares Nov 1–2 with Oct 1–2, not with all of October. A closed period compares with the whole period before it (Q3 with Q2).
  • Same period last year needs more than a year of data. With exactly 12 months kept, it is never offered: the year before any window always starts before the data does. Comparing Q3 with the Q3 before needs about 16 months. For Tyler: retention of 3–12 months (Mark, 2026-11-03) rules out year-over-year.
  • Presets apply in one click. A custom range and a change of comparison wait for Apply, so picking two dates doesn't fetch twice.
  • The data's edges are always in view. Days before the data begins are hatched in the calendar and called out on the report line. The pill shows a dot. Nothing after the last day with data can be picked, and a custom range that runs past it is cut to it.
  • The URL. ?period=last-quarter, ?from=…&to=…, &compare=year|none. The defaults (30 days, previous period) are never written, so qdash's old ?period=7d links still read.
  • Baking. Named windows are a finite set, so the c113 demo can bake them. A custom range is live-only.
  • For the layer (Phase 5). The model (app/utils/time-window.ts) carries over as is. The panel replaces the dropdown in Filter's timeframe column, and timeframeOptions gives way to a window value. The pill chrome is FilterItem's.

Qpoint Brand Style Guide