docs(statistics-deck): zero-scroll display model and the projector paradox #80

Merged
gabogg merged 11 commits from docs/statistics-deck-display-model into master 2026-09-26 11:25:18 +00:00
Owner

Problem

The statistics deck proposed in #20 was closed because its content and layout no longer match the plan. The one argument from it that still holds, and the reason the deck needs a new design, is the projector paradox. It was buried in §1.2 of that RFC and never carried into a decision:

  • Meeting room projectors (70"–120") and flat panels (65"–85") are almost always driven at 1920 × 1080, so a layout that picks "scrolling vs. fits on one screen" by resolution treats a 72" projector as a laptop. Half the figures end up below the fold and the presenter scrolls in front of the room.
  • Resolution also gets density backwards. A 13" 1080p laptop runs at about 166 DPI, read from arm's length. A 72" 1080p projector runs at about 30 DPI, read from 3–6 m, where a dense layout is the more legible one.

The deck's audience is investors and presentations: meaningful KPIs and graphs about footfall and its trend, not operations or calibration detail.

Approach

Add docs/architecture/rfc-statistics-deck-display-model.md, a new RFC that keeps the paradox and turns it into display rules:

  1. No scrolling on any display: 100dvh, overflow: hidden, minmax(0, Nfr) rows; graphs redraw to their box and thin out labels instead of overflowing.
  2. One closed period per view (Complete Day / Week / Month in facility time), switched by tabs.
  3. Layout profiles chosen by the viewer, never inferred from resolution. Room (projector / large panel: 6 KPIs, 4–5 graphs), Desk (monitor: 4 KPIs, 3 graphs), Laptop (3 KPIs, 1 graph). A profile is a different layout, not a zoom, so 3 periods × 3 profiles = nine designed views.
  4. One 38 px top bar (tabs, profile switch, Fullscreen, back to ops), reclaiming about 90 px. Fullscreen is the primary presentation mode.
  5. A 1080p height budget for Room (38 + 2 + 125 / 572 / 343 px), also checked at the ~960 px of a normal browser window.
  6. Period selector in the top bar (rules from #81 in RFC §5.1); Year period out of scope.
  7. Content direction: KPIs and graphs, no tables, using the current glossary definitions from #68–#71. A candidate KPI and graph set per period is listed for confirmation on real data.
  8. Data-quality marker (RFC §4.1): two tiers, Estimate and Unreliable, driven by the cycle verdict, gap estimates and missing days, never a Data Trust threshold. A top-bar badge plus per-day graph marks, amber only, a numpad * detail panel, always on. Records skip Unreliable days. The occupancy confidence margin stays off the deck.
  9. Small screens stack and scroll below 760 CSS px, the only exception to rule 1.

Not carried over from #20: the metric catalogue, the schemas, the per-period layouts, and its reading of "density" as a font scale.

The old RFC remains readable at refs/pull/20/head (482f827, docs/architecture/rfc-executive-statistics-deck.md).

Mockup

https://claude.ai/artifact/AECeXhQqEWZHEoZYNbmVuL (shared; also linked from the RFC header)

  • All nine views: period tabs × Room / Desk / Laptop.
  • Numpad shortcuts: 7 8 9 period, 4 5 6 layout, 0 fullscreen, . period picker, / help (- / + reserved for previous / next period). The ? button in the top bar (or the ? key) shows them on a numpad diagram.
  • Opens in a "1920×1080 fullscreen" preview that renders a real 1920-px deck scaled to fit; also a 1920×960 browser-window mode and fit-to-window.
  • Period button at the left of the top bar (WEEK MON 14 – SUN 20 SEP 2026 ▾, numpad .) opens a WIP placeholder picker; selection rules are in #81.
  • Comparisons use the previous period first (Day: vs last Wednesday) and add last year only when that data exists.
  • The Month view is about the month only: day by day, running total vs July, peak inside per day, average by weekday, entrance share vs July. Yearly trends are out of scope.
  • The figures are invented. The back-to-ops control and the data-quality marker are not in the mockup.
  • #81 (closed): period selection; decisions in RFC §5.1 and CONTEXT.md.
  • Deck routes, all merged: #82 selectable periods, #83 period summary KPIs, #84 daily totals (absorbs #87 as bucket=hour), #86 per-entrance breakdown, #88 usual-weekday baselines. They sit under a separate read-only /api/statistics/ router.
  • Statistics rules, merged: #103 Closed Days, #104 partial-period comparisons, #105 baseline sample rules, #106 per-day excluded/trusted and the cycle's own multiplier.
  • #121 viewer role, merged in #123. #107 wallboard mode (deferred).
  • Follow-ups from the 2026-09-26 grilling: #128 one ranked cycle verdict (offset resets are not verdicts), #129 marker inputs (records rule, per-bucket gap flag, tier counts, gap intervals), #130 calibration tools move into the configuration tab, #131 retire the routes of the dropped analytics charts (blocked until the deck ships).
  • #85 (closed): monthly/yearly series, dropped with yearly scope.

Design points

All settled; see RFC §5, dated per session (2026-09-24 triage, 2026-09-25 maintainer decisions and grilling, 2026-09-26 grilling). RFC §6 now lists only what is deferred.

Notes

  • Status: Accepted (2026-09-26).

  • Docs only; no code changes. Also adds glossary terms to CONTEXT.md: Complete Period, Partial Period, Weekend Share, Data-Quality Marker and Cycle Verdict. Usual Weekday Baseline and Closed Day came to master with #105 and #103. Rebased onto master on 2026-09-26; pre-commit (ruff, pytest) and scripts/check_docs.py passed.

  • The RFC sits in docs/architecture/ and is linked from docs/README.md (Architecture and explanation). Accepted by the maintainer on 2026-09-26.

Refs #20

🤖 Generated with Claude Code

## Problem The statistics deck proposed in #20 was closed because its content and layout no longer match the plan. The one argument from it that still holds, and the reason the deck needs a new design, is the **projector paradox**. It was buried in §1.2 of that RFC and never carried into a decision: - Meeting room projectors (70"–120") and flat panels (65"–85") are almost always driven at 1920 × 1080, so a layout that picks "scrolling vs. fits on one screen" by resolution treats a 72" projector as a laptop. Half the figures end up below the fold and the presenter scrolls in front of the room. - Resolution also gets density backwards. A 13" 1080p laptop runs at about 166 DPI, read from arm's length. A 72" 1080p projector runs at about 30 DPI, read from 3–6 m, where a dense layout is the more legible one. The deck's audience is investors and presentations: meaningful KPIs and graphs about footfall and its trend, not operations or calibration detail. ## Approach Add `docs/architecture/rfc-statistics-deck-display-model.md`, a new RFC that keeps the paradox and turns it into display rules: 1. No scrolling on any display: `100dvh`, `overflow: hidden`, `minmax(0, Nfr)` rows; graphs redraw to their box and thin out labels instead of overflowing. 2. One closed period per view (Complete Day / Week / Month in facility time), switched by tabs. 3. **Layout profiles chosen by the viewer, never inferred from resolution.** Room (projector / large panel: 6 KPIs, 4–5 graphs), Desk (monitor: 4 KPIs, 3 graphs), Laptop (3 KPIs, 1 graph). A profile is a different layout, not a zoom, so 3 periods × 3 profiles = **nine designed views**. 4. One 38 px top bar (tabs, profile switch, Fullscreen, back to ops), reclaiming about 90 px. Fullscreen is the primary presentation mode. 5. A 1080p height budget for Room (38 + 2 + 125 / 572 / 343 px), also checked at the ~960 px of a normal browser window. 6. Period selector in the top bar (rules from #81 in RFC §5.1); Year period out of scope. 7. Content direction: KPIs and graphs, no tables, using the current glossary definitions from #68–#71. A candidate KPI and graph set per period is listed for confirmation on real data. 8. **Data-quality marker** (RFC §4.1): two tiers, Estimate and Unreliable, driven by the cycle verdict, gap estimates and missing days, never a Data Trust threshold. A top-bar badge plus per-day graph marks, amber only, a numpad `*` detail panel, always on. Records skip Unreliable days. The occupancy confidence margin stays off the deck. 9. Small screens stack and scroll below 760 CSS px, the only exception to rule 1. **Not carried over from #20:** the metric catalogue, the schemas, the per-period layouts, and its reading of "density" as a font scale. The old RFC remains readable at `refs/pull/20/head` (`482f827`, `docs/architecture/rfc-executive-statistics-deck.md`). ## Mockup **https://claude.ai/artifact/AECeXhQqEWZHEoZYNbmVuL** (shared; also linked from the RFC header) - All nine views: period tabs × Room / Desk / Laptop. - Numpad shortcuts: 7 8 9 period, 4 5 6 layout, 0 fullscreen, `.` period picker, `/` help (`-` / `+` reserved for previous / next period). The `?` button in the top bar (or the `?` key) shows them on a numpad diagram. - Opens in a "1920×1080 fullscreen" preview that renders a real 1920-px deck scaled to fit; also a 1920×960 browser-window mode and fit-to-window. - Period button at the left of the top bar (`WEEK MON 14 – SUN 20 SEP 2026 ▾`, numpad `.`) opens a WIP placeholder picker; selection rules are in #81. - Comparisons use the previous period first (Day: vs last Wednesday) and add last year only when that data exists. - The Month view is about the month only: day by day, running total vs July, peak inside per day, average by weekday, entrance share vs July. Yearly trends are out of scope. - The figures are invented. The back-to-ops control and the data-quality marker are not in the mockup. ## Related issues - #81 (closed): period selection; decisions in RFC §5.1 and `CONTEXT.md`. - Deck routes, all merged: #82 selectable periods, #83 period summary KPIs, #84 daily totals (absorbs #87 as `bucket=hour`), #86 per-entrance breakdown, #88 usual-weekday baselines. They sit under a separate read-only `/api/statistics/` router. - Statistics rules, merged: #103 Closed Days, #104 partial-period comparisons, #105 baseline sample rules, #106 per-day `excluded`/`trusted` and the cycle's own multiplier. - #121 viewer role, merged in #123. #107 wallboard mode (deferred). - Follow-ups from the 2026-09-26 grilling: #128 one ranked cycle verdict (offset resets are not verdicts), #129 marker inputs (records rule, per-bucket gap flag, tier counts, gap intervals), #130 calibration tools move into the configuration tab, #131 retire the routes of the dropped analytics charts (blocked until the deck ships). - #85 (closed): monthly/yearly series, dropped with yearly scope. ## Design points All settled; see RFC §5, dated per session (2026-09-24 triage, 2026-09-25 maintainer decisions and grilling, 2026-09-26 grilling). RFC §6 now lists only what is deferred. ## Notes - **Status: Accepted (2026-09-26).** - Docs only; no code changes. Also adds glossary terms to `CONTEXT.md`: Complete Period, Partial Period, Weekend Share, Data-Quality Marker and Cycle Verdict. Usual Weekday Baseline and Closed Day came to master with #105 and #103. Rebased onto master on 2026-09-26; pre-commit (ruff, pytest) and `scripts/check_docs.py` passed. - The RFC sits in `docs/architecture/` and is linked from `docs/README.md` (Architecture and explanation). Accepted by the maintainer on 2026-09-26. Refs #20 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs(statistics-deck): RFC for the zero-scroll display model
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m23s
03f85bc875
Recover the projector paradox from the closed PR #20 RFC and turn it
into display rules for a redesigned statistics deck: no scrolling on
any display, one closed period per view, a viewer-chosen density scale
decoupled from resolution, a single 38 px top bar, and a 1080p height
budget. The per-period content is left open for a separate design pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): layout profiles and investor content direction
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m28s
975e854da6
Replace the density scale with three layout profiles (Room, Desk,
Laptop). A profile is a different arrangement of KPIs and graphs, not a
zoom level, which gives nine designed views across the three periods.
Record the deck's audience (investors and presentations), a candidate
KPI and graph set per period, and the open questions it raises,
including year-on-year history depth and a data-quality marker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Opened #81 (needs triage: how complete weeks and months are defined and selected) and the route issues the deck needs: #82–#88. The mockup now has a period selector button in the top bar of each view; the picker itself is a WIP placeholder.

Opened #81 (needs triage: how complete weeks and months are defined and selected) and the route issues the deck needs: #82–#88. The mockup now has a period selector button in the top bar of each view; the picker itself is a WIP placeholder.
docs(statistics-deck): period selector placement and route issues
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m27s
e846922080
Place the period picker button in the top bar, link the selection
rules (#81) and the proposed routes (#82-#88), and record that a year
period is out of scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): day visitors compare against last week first
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m26s
0f2f8c67ad
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): keep the month view about the month
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m23s
c8cf05af23
Replace the 13-month trend and yearly growth graphs with month-scoped
ones, compare against the previous period first and add last year only
when that data exists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): link the mockup from the RFC
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m24s
08576720fd
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): numpad shortcuts and help button
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m29s
ca9407aa8a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(glossary): complete and partial periods, usual weekday baseline, weekend share
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m24s
40a6deb1da
Terms settled while triaging the statistics deck issues (#81, #83, #88).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(statistics-deck): record triage decisions in the RFC
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m23s
e5dd9583ec
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

The route blockers now have draft PRs, grouped by shared scope and stacked in review order:

  1. #89 — #82 selectable closed periods + #84 daily totals and hourly heatmap (#87 absorbed).
  2. #90 — #88 usual-weekday baselines, plus #77 item 2 (business-day default for dayparts); depends on #89.
  3. #92 — #83 KPI summaries + #86 entrance comparisons; depends on #90.

The final stack passes 291 tests locally, Ruff/pre-commit, and the documentation route check (72 HTTP operations). These remain WIP for review and merge in the order above; issue closure and PR #80 readiness follow their merges.

The route blockers now have draft PRs, grouped by shared scope and stacked in review order: 1. #89 — #82 selectable closed periods + #84 daily totals and hourly heatmap (#87 absorbed). 2. #90 — #88 usual-weekday baselines, plus #77 item 2 (business-day default for dayparts); depends on #89. 3. #92 — #83 KPI summaries + #86 entrance comparisons; depends on #90. The final stack passes 291 tests locally, Ruff/pre-commit, and the documentation route check (72 HTTP operations). These remain WIP for review and merge in the order above; issue closure and PR #80 readiness follow their merges.
Author
Owner

New requirements from the maintainer (2026-09-25), to fold into the RFC

  1. Language selector on the deck. The deck carries its own language switch (the app is Spanish/English). All deck copy goes through i18n, and period labels are formatted on the client from the structured fields the statistics routes already return.
  2. A dedicated role that only sees the deck. Users with this role log in straight to the statistics deck and can reach nothing else. The statistics routes are already read-only and require only a login.
  3. Admins get the deck where the calibration tab is today. The deck takes the calibration tab's place in the admin navigation.
  4. The calibration tools move to the configuration tab, where the schedules, exceptions and occupancy settings are configured.

Open points to settle before the RFC is final (being triaged with the maintainer):

  • Role name, and whether operators also see the deck.
  • Whether the language choice is per browser (like the layout profile) or per user.
  • Which calibration tools move, and how the configuration tab is organised once they arrive.

Also to fold in from the 2026-09-25 grilling: Closed Days (#103, merged), comparison coverage threshold (#104, merged), Usual Weekday Baseline wording (#105), quality marker via audit verdict plus per-day excluded (#106), small-screen behaviour, default profile Room, no wallboard mode in v1 (#107).

🤖 Generated with Claude Code

## New requirements from the maintainer (2026-09-25), to fold into the RFC 1. **Language selector on the deck.** The deck carries its own language switch (the app is Spanish/English). All deck copy goes through i18n, and period labels are formatted on the client from the structured fields the statistics routes already return. 2. **A dedicated role that only sees the deck.** Users with this role log in straight to the statistics deck and can reach nothing else. The statistics routes are already read-only and require only a login. 3. **Admins get the deck where the calibration tab is today.** The deck takes the calibration tab's place in the admin navigation. 4. **The calibration tools move to the configuration tab**, where the schedules, exceptions and occupancy settings are configured. Open points to settle before the RFC is final (being triaged with the maintainer): - Role name, and whether operators also see the deck. - Whether the language choice is per browser (like the layout profile) or per user. - Which calibration tools move, and how the configuration tab is organised once they arrive. Also to fold in from the 2026-09-25 grilling: Closed Days (#103, merged), comparison coverage threshold (#104, merged), Usual Weekday Baseline wording (#105), quality marker via audit verdict plus per-day `excluded` (#106), small-screen behaviour, default profile Room, no wallboard mode in v1 (#107). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Owner

Decisions on the new requirements (maintainer, 2026-09-25)

  • Role: viewer, enforced on the server by an explicit list of allowed routes (statistics, login, session); everything else returns 403 and the WebSocket refuses it. Operators also see the deck, as a tab. Filed as #121.
  • Language: a per-browser choice on the deck, defaulting to the app's current language, so a room PC keeps the presenter's language whoever logs in.
  • Admin navigation: the deck replaces the current analytics tab (content-analytics).
  • Calibration tools move into a collapsible "Calibration" section of the configuration tab (occupancy-admin, where the schedules, exceptions and occupancy settings are). From today's analytics tab that means the proportional calibration inspector, the historical drift chart and the calibration log, including the manual calibration modal and the trust toggles.

Still open: today's analytics tab also has three operational charts that are not calibration tools (flow curves and net flow, estimated occupancy with its confidence margin, the multi-day comparison). Where they go is being asked separately.

🤖 Generated with Claude Code

## Decisions on the new requirements (maintainer, 2026-09-25) - **Role:** `viewer`, enforced on the server by an explicit list of allowed routes (statistics, login, session); everything else returns 403 and the WebSocket refuses it. Operators also see the deck, as a tab. Filed as #121. - **Language:** a per-browser choice on the deck, defaulting to the app's current language, so a room PC keeps the presenter's language whoever logs in. - **Admin navigation:** the deck replaces the current `analytics` tab (`content-analytics`). - **Calibration tools** move into a collapsible "Calibration" section of the configuration tab (`occupancy-admin`, where the schedules, exceptions and occupancy settings are). From today's `analytics` tab that means the proportional calibration inspector, the historical drift chart and the calibration log, including the manual calibration modal and the trust toggles. Still open: today's `analytics` tab also has three operational charts that are **not** calibration tools (flow curves and net flow, estimated occupancy with its confidence margin, the multi-day comparison). Where they go is being asked separately. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Owner

Decision: the analytics tab's operational charts (maintainer, 2026-09-25)

The three non-calibration charts on today's analytics tab are dropped, not moved:

  • flow curves and net flow;
  • estimated occupancy with its confidence margin;
  • the multi-day comparison.

Where they matter, their content should instead be represented in the statistics deck. The candidate set in RFC §4 already covers most of it:

  • "people inside over the day" (Day) and "peak people inside per day" (Month) cover the occupancy curve;
  • "visitors by hour vs 4-week same-weekday mean" covers the flow curves;
  • the Week and Month day-by-day graphs cover the multi-day comparison.

The RFC update should say so explicitly and decide whether the occupancy confidence margin appears anywhere on the deck (e.g. as the data-quality marker's detail) or is dropped with the chart.

Cleanup once the deck ships: any admin route that only fed those charts (e.g. /api/analytics/timeseries/multiday) should be checked for remaining callers and retired if unused.

🤖 Generated with Claude Code

## Decision: the analytics tab's operational charts (maintainer, 2026-09-25) The three non-calibration charts on today's `analytics` tab are **dropped**, not moved: - flow curves and net flow; - estimated occupancy with its confidence margin; - the multi-day comparison. Where they matter, their content should instead be **represented in the statistics deck**. The candidate set in RFC §4 already covers most of it: - "people inside over the day" (Day) and "peak people inside per day" (Month) cover the occupancy curve; - "visitors by hour vs 4-week same-weekday mean" covers the flow curves; - the Week and Month day-by-day graphs cover the multi-day comparison. The RFC update should say so explicitly and decide whether the occupancy **confidence margin** appears anywhere on the deck (e.g. as the data-quality marker's detail) or is dropped with the chart. Cleanup once the deck ships: any admin route that only fed those charts (e.g. `/api/analytics/timeseries/multiday`) should be checked for remaining callers and retired if unused. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gabogg force-pushed docs/statistics-deck-display-model from e5dd9583ec
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m23s
to 3b702f6582
All checks were successful
CI / lint-and-test (pull_request) Successful in 2m6s
2026-09-26 10:08:57 +00:00
Compare
Author
Owner

Open design points settled (grilling, 2026-09-26)

RFC §6's four open points are closed, and the 2026-09-25 decisions from the comments above are folded into the RFC (new §4.1; §5 split by session). The branch is rebased onto master; the only conflict was the glossary in CONTEXT.md, where master's Usual Weekday Baseline and Closed Day entries were kept. The route blockers (#82–#88) are all merged, so the blocked label and the "Blocked by" line are gone.

# Decision
Small screens Stack and scroll below 760 CSS px; the no-scroll rule applies from the Laptop profile up.
Verdict (#128) One ranked cycle verdict (retroactive audit, then the nocturnal audit as set by the admin trust toggle, then the automatic verdict) decides excluded and trusted for the marker, the baseline and excluded_days. MANUAL_ADMIN and MANUAL_OVERRIDE offset resets are not verdicts.
Confidence margin Not on the deck; it stays in the admin calibration tools.
Marker tiers Estimate: gap estimated or unverified. Unreliable: excluded or missing.
Placement Period badge in the top bar plus marks on per-day graphs; no per-KPI marks.
Figures Totals and averages include marked days; records skip Unreliable days.
min_data_trust Ignored by the marker.
Look Amber only, no hazard red. Estimate: dashed outline and ◇. Unreliable: grey hatching and ◆.
Per profile Room and Desk: full text. Laptop: glyphs and counts.
Day view Hatch the buckets that overlap a gap; grey out an Unreliable day's graphs.
Detail Numpad * or a click on the badge opens plain-language lines per day; no internal codes.
Hiding Not possible; the marker is always on.

Filed: #128 updated with the verdict decision (now ready-for-agent); #129 marker inputs (records rule, per-bucket gap flag; I also added tier counts on PeriodQuality and per-day gap intervals, which the badge and detail panel need); #130 calibration tools into the configuration tab; #131 retire the dropped charts' routes (blocked until the deck ships).

The RFC is ready for approval. What remains is the deck UI work itself; #121 (PR #123) and #128/#129 feed into it.

🤖 Generated with Claude Code

## Open design points settled (grilling, 2026-09-26) RFC §6's four open points are closed, and the 2026-09-25 decisions from the comments above are folded into the RFC (new §4.1; §5 split by session). The branch is rebased onto master; the only conflict was the glossary in `CONTEXT.md`, where master's Usual Weekday Baseline and Closed Day entries were kept. The route blockers (#82–#88) are all merged, so the `blocked` label and the "Blocked by" line are gone. | # | Decision | |---|---| | Small screens | Stack and scroll below 760 CSS px; the no-scroll rule applies from the Laptop profile up. | | Verdict (#128) | One ranked cycle verdict (retroactive audit, then the nocturnal audit as set by the admin trust toggle, then the automatic verdict) decides `excluded` and `trusted` for the marker, the baseline and `excluded_days`. `MANUAL_ADMIN` and `MANUAL_OVERRIDE` offset resets are not verdicts. | | Confidence margin | Not on the deck; it stays in the admin calibration tools. | | Marker tiers | **Estimate**: gap estimated or unverified. **Unreliable**: excluded or missing. | | Placement | Period badge in the top bar plus marks on per-day graphs; no per-KPI marks. | | Figures | Totals and averages include marked days; records skip Unreliable days. | | `min_data_trust` | Ignored by the marker. | | Look | Amber only, no hazard red. Estimate: dashed outline and `◇`. Unreliable: grey hatching and `◆`. | | Per profile | Room and Desk: full text. Laptop: glyphs and counts. | | Day view | Hatch the buckets that overlap a gap; grey out an Unreliable day's graphs. | | Detail | Numpad `*` or a click on the badge opens plain-language lines per day; no internal codes. | | Hiding | Not possible; the marker is always on. | **Filed:** #128 updated with the verdict decision (now `ready-for-agent`); #129 marker inputs (records rule, per-bucket gap flag; I also added tier counts on `PeriodQuality` and per-day gap intervals, which the badge and detail panel need); #130 calibration tools into the configuration tab; #131 retire the dropped charts' routes (`blocked` until the deck ships). The RFC is ready for approval. What remains is the deck UI work itself; #121 (PR #123) and #128/#129 feed into it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs(statistics-deck): accept the display model RFC and link it from the docs index
All checks were successful
CI / lint-and-test (pull_request) Successful in 1m56s
2f1950ea45
Refs #80

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gabogg changed title from WIP: docs(statistics-deck): zero-scroll display model and the projector paradox to docs(statistics-deck): zero-scroll display model and the projector paradox 2026-09-26 11:25:05 +00:00
gabogg merged commit 2de2b34740 into master 2026-09-26 11:25:18 +00:00
gabogg deleted branch docs/statistics-deck-display-model 2026-09-26 11:25:18 +00:00
Sign in to join this conversation.
No description provided.