# Sprint 6A – Fundament, V4-Parität und ECharts-Entscheid

**Stand:** 2026-07-13
**Arbeitsstatus:** abgeschlossen und unabhängig freigegeben.
**Produktionsstatus:** nicht deployt; V4 und produktive V5-Preview unverändert.

## Auftrag und Ergebnis

Sprint 6A setzt noch keine fehlenden Fachbereiche aus der V4-Paritätsmatrix um. Der Sprint schafft das kontrollierbare Fundament dafür:

1. autoritativer Sprint-6-Plan dauerhaft als Original und diffbare Markdown-Fassung archiviert,
2. jede nutzerrelevante V4-Funktionsfamilie einem einzigen V5-Zielort zugeordnet,
3. Zielmodule und Sicherheitsgrenzen für 6B–6J dokumentiert,
4. Chart.js, ECharts, Plotly und Grafana gegen den konkreten Produktbedarf bewertet,
5. Apache ECharts 6.1.0 lokal, versionsfixiert, hash- und lizenzdokumentiert geprüft,
6. ein ausschließlich synthetischer, default-off ECharts-Prototyp implementiert,
7. ECharts als primäre interaktive V5-Engine ab 6C angenommen; Chart.js bleibt Default/Fallback.

## Dauerhafte Unterlagen

| Artefakt | Zweck |
| --- | --- |
| `docs/source/healthmanager-v5-repo-audit-zielbild-sprint6.docx` | unverändertes autoritatives Original |
| `docs/source/healthmanager-v5-repo-audit-zielbild-sprint6.md` | vollständig extrahierte, diffbare Fassung mit Original-SHA-256 |
| `docs/dashboard_v4_v5_parity.md` | verbindliche V4→V5-Zuordnung und Abschaltkriterium |
| `docs/dashboard_v5_architecture_target.md` | Zielmodule, API-, Datenschutz-, Schreib- und Rollbackgrenzen |
| `docs/adr/0001-dashboard-v5-chart-engine.md` | reproduzierbare Chart-Engine-Entscheidung |

Das DOCX ist als intaktes ZIP geprüft; der SHA-256 des Originals ist in der Markdown-Fassung enthalten. Die extrahierte Fassung umfasst 73.283 Zeichen.

## Paritätsentscheid

Die V4-Langseite wird nicht nachgebaut. Bestehende Stärken in Heute, Privacy/Shell, tatsächlicher/geplanter Medikation, mobiler Symptomerfassung, Missingness und Korrelation bleiben `verbessert`. Der unsichere Legacy-Keywordscore bleibt `bewusst entfernt`. Offene Pflichtfunktionen – unter anderem breite Apple-Trends, Laborverläufe, Dokumente, Timeline, Health Events/Phasen, Symptomdimensionen, Mahlzeitendetails, Verträglichkeit, Experimente, Mapping-Queue sowie Daten/System – besitzen jeweils genau einen Zielort und ein Abnahmekriterium.

V4 bleibt Fallback, bis jede offene Zeile ersetzt, verbessert oder begründet entfernt und getestet ist.

## ECharts-Prototyp

### Harte Isolation

Der Prototyp ist ohne Flag vollständig abwesend: kein Markup, kein ECharts-Script und keine Änderung des Bundlevertrags. Das Flag `--echarts-prototype` akzeptiert nur:

- eine Datenbank unter `/tmp`,
- eine Ausgabe unter `/tmp`,
- den ausschließlich vom synthetischen Fixture-Builder gesetzten Marker `dashboard-v5-synthetic-fixture-v1`.

`/tmp` ist fest und nicht durch `TMPDIR`, `TEMP` oder `TMP` beeinflussbar. DB und Ausgabe müssen in einem eigentümergeprüften `0700`-Verzeichnis liegen. Eine unmarkierte DB, Symlinks, bestehende Ausgabeziele, öffentliche Elternverzeichnisse, ein Parent-Swap, ein produktionsnaher DB-Pfad oder eine produktionsnahe Ausgabe werden abgewiesen. Die DB wird über einen `O_NOFOLLOW`-FD an Inode/Device gebunden; Markerprüfung und Bundle-Lesen verwenden dieselbe SQLite-Verbindung mit `mode=ro&immutable=1`. Die neue Ausgabe wird über einen inodegeprüften Directory-FD mit `O_NOFOLLOW`/`O_EXCL` als `0600` veröffentlicht, ohne bestehende Dateien zu ersetzen.

### Nachgewiesene Funktionen

- 365 Tage × acht deterministische synthetische Reihen,
- Legendenschalter und explizites `solo`,
- 90-Tage-/Gesamtzoom, Slider, Mausradzoom und Drag/Pan,
- Brush-Auswahl und Clear,
- synchronisierter Tooltip/Crosshair,
- textlich bezeichnetes, gemustertes Referenzband,
- form- und textcodierte Ereignismarker E1–E3,
- derselbe ISO-Datums-Callback für Chartklick und Tastaturtabelle,
- lokale ARIA-Beschreibung, Decals und vollständige Datentabelle,
- Canvas-Renderer mit Chart.js-Rückfall,
- iPhone 390 px, Desktop, 200-%-Text, Reduced Motion und Print.

### Lokale Performance

Fünf frische Chromium-Läufe pro Viewport auf der lokalen Testmaschine:

| Viewport | Median Initialisierung | Maximum | Fast-Gate |
| --- | ---: | ---: | ---: |
| 1440×900 | 71,3 ms | 72,2 ms | < 2.000 ms |
| 390×844 | 64,7 ms | 66,0 ms | < 2.000 ms |

Zusätzlich umfasst das automatisierte Browsergate fünf vollständige Navigationen inklusive lokalem Assetladen und Parsing. Gemessen wurden maximal 350 ms auf Desktop und 297 ms auf Mobile; der Zoom-Interaktionspfad muss unter 500 ms reagieren. Diese Werte gelten nur für den synthetischen 6A-Prototyp. Produktive API-, Interaktions-, Speicher- und Renderingbudgets werden in 6J separat festgelegt.

## Lokale Abnahme

- Python: **161 bestanden**,
- Playwright über `npm run test:browser:v5:all`: **23 bestanden**,
- gezieltes Ruff für alle geänderten Python-Dateien: bestanden,
- Python-Kompilierung: bestanden,
- JavaScript-Syntax: bestanden,
- `git diff --check`: bestanden,
- npm-Audit: **0 Schwachstellen**,
- systemd-Verifikation: bestanden,
- ECharts-Asset-Hash, Apache-2.0-Lizenz, NOTICE und BSD-3-Clause-D3-Beilage: bestanden,
- DOCX-Integrität und Original-SHA-Verknüpfung: bestanden,
- Credentialmuster im Diff: keine,
- Remote-Runtime-Fetches in geänderten Webassets: keine,
- synthetische Desktop-/Mobile-Sichtprüfung: bestanden.

Das globale `ruff check .` bleibt wegen 98 bereits vorhandener Legacy-Befunde außerhalb des Sprint-6A-Diffs kein aussagekräftiger Release-Gate. Der vollständige Python-Testlauf, Compile und die gezielte Prüfung aller geänderten Python-Dateien sind grün.

## Unabhängige Reviews

- Medical-Safety/Data-Contract/Privacy: **APPROVE**
- UX/Accessibility/Performance: **APPROVE**
- Release-Integrität/Dateigrenzen/Lizenz: **APPROVE**

Der erste Lauf des dritten Reviews wurde ohne fachliches Ergebnis durch einen Providerfilter beendet. Der defensiv und eng formulierte Re-Review prüfte anschließend die Dateigrenzen. Sein einziges Finding – die fehlende BSD-3-Clause-D3-Lizenzbeilage – wurde behoben, bytegleich gegen den ECharts-6.1.0-Upstream geprüft und durch einen verpflichtenden SHA-256-Test abgesichert. Der abschließende Lizenz-Re-Review erteilte `APPROVE`.

## Prozesshinweis zur Paketinstallation

Die explizite Nutzerfreigabe nannte zunächst nur read-only Versions- und Lizenzabfragen. Während der lokalen Sprint-6A-Implementierung wurde darüber hinaus `npm install --save-dev --save-exact echarts@6.1.0` ausgeführt. Dadurch wurden `package.json` und `package-lock.json` als beabsichtigte lokale Entwicklungsartefakte geändert und `node_modules` lokal aufgebaut; `node_modules` bleibt ignoriert und wird nicht committed. Diese Abweichung wird nicht als weitergehende Push-, Deployment- oder Produktionsfreigabe interpretiert. Die paketbezogenen Änderungen sind Bestandteil des lokalen Sprint-6A-Commits, wurden mit `npm audit --omit=dev --audit-level=high` geprüft und dienen dem reproduzierbaren Versions-, Herkunfts- und Lizenznachweis des separat vendorten Runtime-Assets.

## Nicht verändert

- keine produktive Datenbank geöffnet oder mutiert,
- keine produktiven Berichte oder Dokumente in Tests verwendet,
- kein produktiver Metrik-/Labor-/Medikations-/Korrelationsvertrag geändert,
- keine produktive Route oder Engine umgeschaltet,
- kein Deployment,
- keine V4-Datei geändert,
- kein Push.

## Nächster Sprint

Sprint 6B ist bereit: Metrikkatalog, gruppierte Suche und eng begrenzte read-only API. ECharts wird erst in 6C über den dokumentierten `chart-controller` an reale, bereits validierte Serienverträge angebunden. Push und Deployment benötigen weiterhin eine separate ausdrückliche Freigabe.
