# CHANGES REQUIRED ## Release-blocking findings 1. **Cockpit chart silently drops recent values for valid long-span series** - `scripts/health/assets/health-assets/dashboard-v5.js:441-448` - Calendar densification stops after 3,660 days, starting from the oldest observation. The contract limits the **number of observations** to 3,660, but does not limit their calendar span. - Deterministic probe with two valid points (`2010-01-01`, `2026-06-14`) in “Alle”: - Card displayed the latest value: `2 / 21` - Chart ended on `08.01.2020` - Chart contained only the old value `1`; the 2026 value disappeared. - This creates a direct card/chart contradiction. The chart must preserve the recent endpoint or use a time-scale/capped strategy that cannot silently omit the latest data. Add a regression test. 2. **Event lane is not temporally aligned at its boundaries** - `dashboard-v5.js:368-379` - Marker positions are forcibly clamped to `12%…88%`. A medication event on the chart’s final date therefore appears at 88%, not at the timeline endpoint. - Runtime evidence: the event and final chart label were both `14.06.2026`, but the marker CSS position was `88%`. - Keep label boxes in bounds if needed, but the temporal marker/tick itself must retain the true position. 3. **Committed browser coverage and documentation are not yet adequate for the claimed chart/event behavior** - `tests/browser/dashboard_v5.spec.js:68-114` - The event assertion checks only the static heading and that a medication label is absent from chart dataset labels. It would pass if no event marker rendered at all. - Missing durable assertions include: - event marker on a measurement-gap day with date/position; - event position refresh after period changes; - chart absent before first activation, single initialization on activation/revisit, and update on period/resize; - period changes verified against Cockpit chart labels/data, cards, coverage and event positions. - Local lifecycle probes passed, but they are not encoded as reproducible regressions. - `HEALTH_DASHBOARD_TEST_URL` is mandatory (`dashboard_v5.spec.js:5-6`), yet no tracked documentation provides a complete synthetic server/start command. The new sprint document only states that screenshots/tests were produced. A clean-checkout operator cannot reproduce the browser gate from documented commands alone. ## Positively verified - `125 passed` with `python -m pytest -q`. - `12 passed` in Playwright across all five declared viewports using a temporary synthetic-only fixture. - `git diff --check`, JavaScript syntax, Python compile/AST checks passed. - Playwright manifest and lockfile consistently pin `1.61.1`. - Focused runtime probes confirmed: - Cockpit chart is lazy-created; - period changes update the existing chart; - revisiting Cockpit does not duplicate the chart; - explicit null gaps use `spanGaps: false`; - mobile navigation did not occlude content at 390/768 widths, including 200% text. - Synthetic database digest was unchanged before/after generation and browser review. - No changed-file secrets, production paths, committed browser artifacts, or accidental production files found. - Dashboard v4 files/routes are unchanged. - The untracked Sprint 5A document appears intentional and must be included when eventually staging the release. ## Workspace impact - **No repository files modified by this review.** - Temporary synthetic database, HTML and local server were removed. - Final audited state: HEAD `50d02e3b848cbdc1cc4724157d6c1dff1d34969b`; working-diff SHA-256 `469c0f5d155460604b92906bcee90090a6cfc9959a1020fac23e61fa8137c7b0`. - Production data, production bundle contents and secrets were not read.