## CHANGES REQUIRED — 2 Important blockers ### Important 1. **Solid line can falsely represent mixed/carried data as fully confirmed** - `WealthCockpitPanel.vue:131-133` makes a segment solid whenever both endpoints have *some* confirmed anchor and neither has a same-day modelled value. - This does not match the visible promise at `WealthCockpitPanel.vue:53`: “Rein bestätigte Abschnitte sind durchgezogen”. - Deterministic mixed-anchor probe produced: - `2026-08-25`: `quality=incomplete`, PostFinance confirmed, bank carried. - `2026-08-26`: `quality=carried`, True Wealth confirmed, PostFinance and bank carried. - Both endpoints have `has_confirmed_anchor=true` and `has_modelled_value=false`, so the mixed/carried segment renders **solid**. - The existing mixed-anchor test (`tests/unit/test_modelled_wealth.py:190-219`) does not assert the frontend dash semantics. This is directly misleading financial-quality encoding. 2. **Main chart lacks an equivalent accessible description** - `WealthCockpitPanel.vue:55-60` exposes only `aria-label="Modellierte Vermögensentwicklung"`. - Dates, values, point quality, solid/dashed meaning, and correction-marker meaning are not available through an accessible table, description, or SVG text alternative. Nearby KPI cards communicate only baseline/current/change, not the represented series. - This fails the requested accessibility review for the primary data visualization. ### Minor - **Pydantic/TypeScript period contract is not exactly closed in parity** - Pydantic reuses `WealthPeriod` for `ModelledWealthDevelopment.period` (`wealth_cockpit.py:92`), allowing `ytd`, `previous_year`, and `12m`. - TypeScript allows only `since_anchor | 1m | 3m | 1y | all` (`portfolio.ts:139`). - Current service output is normalized and therefore does not emit the mismatch, but the API validator accepts payloads the frontend type rejects. - Frontend tests assert chart existence, one quality badge, collapse state, wording, consolidation, and marker text, but not dash geometry, all five quality labels, accessible chart equivalence, target dimensions, or overflow. ### Positively verified - Modelled view is the default, using `1m`. - Mixed-anchor anchor wording includes date **and quality**: “Wert am letzten bestätigten Importstichtag … · [quality]”. - All five quality labels are implemented: Bestätigt, Modelliert, Fortgeschrieben, Unvollständig, Nicht verfügbar. - PostFinance is consolidated and explicitly described as including Settlement-Cash. - Bank component uses “Kontostandentwicklung”. - Verified performance and diagnostics are collapsed by default. - Unknown-position/account wording is generic; current builder sanitizes unknown bank labels and tests prove no raw name, IBAN, or account ID leakage. - Correction markers are period-filtered by the backend and have visible textual entries. - Source-level responsive layout uses wrapping, responsive grids, `min-w-0`, and no obvious fixed-width overflow. Final post-merge Chromium UAT remains appropriate. ### Verification - Frontend focused component tests: **2 passed** - Related frontend page/panel tests: **12 passed** - Frontend `vue-tsc` typecheck: **passed** - Backend modelled-wealth/cockpit tests: **31 passed** - `git diff --check`: **passed** - No files created or modified by this review; repository status remained unchanged. **NO BLOCKERS is not justified because the solid/dashed quality encoding and chart accessibility issues remain.**