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.
- 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
no datacompared withData from Aug 5, 2026 through Nov 2, 2026 · 90 days · PT
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.
| Pill | Dates | Days | Previous period | A year earlier | URL |
|---|---|---|---|---|---|
| Last 24 hours | Nov 2, 2026 | 24 h | Nov 1, 2026 the 24 hours before | not offered | period=24h |
| Last 7 days | Oct 27 – Nov 2, 2026 | 7 | Oct 20 – 26, 2026 the previous 7 days | not offered | period=7d |
| Last 30 days | Oct 4 – Nov 2, 2026 | 30 | Sep 4 – Oct 3, 2026 the previous 30 days | not offered | (default) |
| Last 90 days | Aug 5 – Nov 2, 2026 | 90 | May 7 – Aug 4, 2026 the previous 90 days · no data | not offered | period=90d |
| November 2026 to date | Nov 1 – 2, 2026 | 2 | Oct 1 – 2, 2026 the same days of last month | not offered | period=this-month |
| October 2026 | Oct 1 – 31, 2026 | 31 | Sep 1 – 30, 2026 the month before | not offered | period=last-month |
| Q4 2026 to date | Oct 1 – Nov 2, 2026 | 33 | Jul 1 – Aug 2, 2026 the same days of last quarter · no data | not offered | period=this-quarter |
| Q3 2026 | Jul 1 – Sep 30, 2026 35 days hatched | 92 | Apr 1 – Jun 30, 2026 the quarter before · no data | not offered | period=last-quarter |
| 2026 to date | Jan 1 – Nov 2, 2026 216 days hatched | 306 | Jan 1 – Nov 2, 2025 the same days of last year · no data | not offered | period=ytd |
| All time | Aug 5 – Nov 2, 2026 | 90 | — | not offered | period=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=7dlinks 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 inFilter's timeframe column, andtimeframeOptionsgives way to a window value. The pill chrome isFilterItem's.