- `scripts/health/health_dashboard_v5.py:168-194, 234-251` — `--health-record-6e` automatically enables the 6C ECharts Explorer and 6D calendar/day surfaces; treat this generated profile as the Sprint 6G-A migration target. - `scripts/health/dashboard_v5/render.py:128-160` - `:135` — visible Cockpit Chart.js canvas: `#cockpit-chart`. - `:155` — visible Nutrition Chart.js canvas: `#nutrition-chart`, summary `#nutrition-summary`, and mapping queue `#mapping-review`. - `:149-150` — existing production ECharts Explorer container and accessible table. - `:86, 89` — day-context and nutrition-day containers. - `:57-64, 99-102, 160` — ECharts/API/day scripts plus unconditional Chart.js asset. After migrating Cockpit, nutrition, and SVG sparklines, remove `chart.umd.min.js` from this profile and ensure ECharts is emitted exactly once. - `scripts/health/assets/health-assets/dashboard-v5.js` - `:241-278, 281-307` — visible Cockpit metric-card SVG sparkline renderer (`svg`, segmented `polyline`, final `circle`); replace with a shared lazy ECharts mini-chart helper while retaining gap and ARIA semantics. - `:467-485, 528-625` — visible Cockpit Chart.js lifecycle/data renderer; migrate `chartFor("cockpit-chart", …)` to ECharts and preserve dense gaps, baseline series, dataset counters, lazy initialization, resize, and disposal. - `:375-398, 828` — nutrition summary/mapping UI and `chartFor("nutrition-chart", ["nutrition.histamine"])`; migrate chart only, retain incomplete-as-unknown behavior and mapping review. - `:92-153` — generic `canvas[data-chart-source]` Chart.js helper appears dormant in current rendered markup; remove only after confirming no generated V5 markup uses it. - `:628-758` — legacy Chart.js Explorer/scatter code is dormant because the production shell no longer renders `#explorer-chart`, `#metric-picker`, or `#explorer-scatter`; delete or isolate rather than migrating it as a visible surface. - `:8, 509-513` — current Chart.js instance map/destruction owner; replace with one shared ECharts instance registry/disposal path. - `scripts/health/assets/health-assets/dashboard-v5-api-explorer.js:172-241, 243-265, 286-287` — existing production ECharts patterns to reuse: series construction, `dispose()` before replacement, `echarts.init`, ARIA, gaps, legend/click callbacks, contract hooks, and resize handling. - `scripts/health/assets/health-assets/dashboard-v5-day-controller.js:76-105, 215` — existing ECharts mini-chart implementation and lifecycle for 7-day day-context cards; extract/reuse its init/dispose/resize behavior instead of creating a third chart helper. - `scripts/health/assets/health-assets/dashboard-v5-echarts-prototype.js:25-90, 103-185` — synthetic-only reference for tooltips, zoom, brush, legend controls, ARIA, `ResizeObserver`, and deterministic interaction contracts; do not enable this prototype in the health-record profile. - `scripts/health/assets/health-assets/dashboard-v5.css` - `:55-60, 145-146, 211-212` — SVG/Chart.js-specific Cockpit and canvas sizing selectors to convert to ECharts container sizing. - `:296-298, 361, 384` — existing production ECharts Explorer sizing patterns. - `:425-429` — FullCalendar base and contrast-sensitive selectors: `.calendar-grid`, `.calendar-legend`, `.fc`, `.fc-col-header-cell-cushion`, `.fc-daygrid-day-number`, `.fc-day-other`, `.fc-day-today .fc-daygrid-day-number`, `.fc-highlight`, `.fc-daygrid-event`, and `.health-calendar-event::before` category variants. - `:432` — mobile contrast-sensitive overrides: `.fc`, `.fc-daygrid-event` with transparent text, and `.fc-daygrid-event::before`; explicitly verify category markers remain distinguishable against event/day backgrounds. - `:58-60, 430-432` — add stable ECharts dimensions for Cockpit, nutrition, and shared mini-chart containers at desktop/mobile/200% text/print. - `scripts/health/dashboard_v5/data_provider.py:240-264, 330-355` — nutrition bundle source: complete-day gating, unknown mappings, `nutrition.histamine` series, and mapping task. Keep this contract unchanged unless Sprint 6G-A explicitly adds nutrition presentation fields. - `tests/fixtures/dashboard_v5_fixture.py:224-249` - Extend the synthetic nutrition rows with several dated, fully classified daily summaries so the nutrition chart has deterministic non-empty points and at least one gap. - Retain the existing incomplete mapping row and explicit numeric zero fields. - Add enough dated nutrition/calendar categories to exercise normal, today, other-month, selected-range, and mobile event-marker contrast without real data. - `tests/browser/dashboard_v5_record_6e.spec.js` - Add the health-record-profile cross-view migration test here: Cockpit, nutrition, Explorer, calendar, and day charts use ECharts; no visible Chart.js-owned canvas/SVG sparklines remain; ECharts assets/instances are not duplicated; navigation destroys or reuses instances correctly. - Add desktop, 390px, 200%-text, reduced-motion, print, tooltip, empty-state, and keyboard/table-fallback assertions for migrated Cockpit/nutrition surfaces. - `tests/browser/dashboard_v5.spec.js:103-208, 545-575` - Replace existing `Chart.getChart(...)` Cockpit assertions with ECharts option/instance assertions. - Preserve endpoint/gap/baseline/lazy-single-initialization checks. - Extend nutrition beyond the current empty-state-only assertion with complete, incomplete, zero, mapping-review, and accessible fallback checks. - `tests/browser/dashboard_v5_calendar_day_6d.spec.js:39-66, 144-167, 169-202` - Extend with computed foreground/background contrast checks for weekday/date labels, other-month days, today badge, selection highlight, standard events, and each category pseudo-marker at desktop/mobile. - Strengthen `:144-153` to inspect day mini-chart ECharts options, gaps, ARIA, and disposal. - Keep the existing synthetic-only FullCalendar locality/range/navigation assertions. - `tests/browser/dashboard_v5_explorer_6c.spec.js:35-68, 105-124, 158-177` — reuse its “one visible ECharts explorer/one asset,” option-contract, mobile overflow, touch-target, and screenshot patterns for Cockpit and nutrition. - `tests/browser/dashboard_v5_echarts_prototype.spec.js:28-69, 140-214` — reuse interaction, ARIA, responsive, print, reduced-motion, and repeated-init performance assertions; keep this spec isolated from production-profile tests. - `tests/browser/run_v5_isolated_matrix.sh:11-25, 35-53` — add/run the Sprint 6G-A browser assertions against the `record` group, because that is the exact profile that auto-enables record + calendar/day + Explorer; update the final group count if a new spec/group is added. - `tests/test_dashboard_v5_sprint6e4a_recovery.py:71-95` — extend profile HTML assertions to require one ECharts asset, migrated Cockpit/nutrition containers, and absence of Chart.js/SVG renderer markup/assets in `--health-record-6e`. - `tests/test_dashboard_v5_sprint6e4b.py:96-130` — extend rendered foundation assertions with new shared ECharts helper/container CSS contracts and retained pinned FullCalendar contracts. - `scripts/health/health_dashboard_server.py:61-103, 1000` — retain ECharts route `:91-94`; remove Chart.js route/readiness dependency `:62-65, 1000` only after all V5 consumers are gone. - `scripts/health/assets/health-assets/echarts-6.1.0.min.js`, `echarts-6.1.0.metadata.json:1-21`, `ECHARTS-6.1.0-LICENSE.txt`, `ECHARTS-6.1.0-LICENSE-D3.txt`, `ECHARTS-6.1.0-NOTICE.txt` — existing pinned local ECharts 6.1.0 asset/license set; no new chart dependency is needed. - `tests/test_dashboard_v5_sprint6a.py:104-163` — retain/extend pinned ECharts hash, route, license, CSP, and default/prototype isolation checks. - `THIRD_PARTY_NOTICES.md:1-16` — currently documents only FullCalendar; add the already-vendored ECharts/D3 notice closure if Sprint 6G-A’s release gate expects the repository-level notice to enumerate all shipped chart components. - No files modified.