# HyperTwist Phase 3R Packet 3R-C ECharts Implementation

Created on `2026-05-13`

## Status

`Phase 3R / Packet 3R-C` is now `closed`.

This packet converts `apache/echarts` from the retained analytics and reporting anchor into a landed first-party HyperTwist analytics-reporting lane.

It does not reopen `Phase 0R`, `Phase 1R`, or `Phase 2R-B`.

Those earlier packets still own source-value extraction, retained-set routing, and ownership boundaries.

This packet owns the next question instead:

- what first-party implementation actually landed
- which donor value was realized
- what remains explicitly out of scope for this lane
- what validation was completed
- what the next bounded implementation move is after this landing

## Authority order

For future work on the `apache/echarts` lane, read in this order:

1. this packet for first-party landing scope, accepted widening, and validation result
2. [HYPERTWIST_LIVE_LANES_SOURCE_AND_PRESERVATION_AUDIT_2026-05-13.md](C:/HyperTwist/docs/HYPERTWIST_LIVE_LANES_SOURCE_AND_PRESERVATION_AUDIT_2026-05-13.md:1) for live-lane preserve posture
3. [HYPERTWIST_PHASE_2R_PACKET_2R_B_OWNERSHIP_AND_ACCEPTANCE_CONTRACT_2026-05-13.md](C:/HyperTwist/docs/HYPERTWIST_PHASE_2R_PACKET_2R_B_OWNERSHIP_AND_ACCEPTANCE_CONTRACT_2026-05-13.md:1) for ownership boundaries and pre-widening acceptance markers
4. [HYPERTWIST_PHASE_0R_PACKET_0R_B_EVALUATION_2026-05-12.md](C:/HyperTwist/docs/HYPERTWIST_PHASE_0R_PACKET_0R_B_EVALUATION_2026-05-12.md:1) for source-value extraction and non-promotion rationale
5. [REPO_LICENSE_TRACKING.md](C:/HyperTwist/docs/REPO_LICENSE_TRACKING.md:1) for license and notice obligations

## Packet licensing snapshot

- `apache/echarts`: `Apache-2.0`
- `ecomfe/zrender`: `BSD-3-Clause`
- `ecomfe/echarts-gl`: `BSD-3-Clause`

Checked local notice surface:

- [NOTICE](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/NOTICE:1) currently states `Apache ECharts` and `Copyright 2017-2026 The Apache Software Foundation`

## Packet result

`3R-C` lands `apache/echarts` as:

- `implemented_live_permissive`
- `landed_permissive_preserve`

`ecomfe/zrender` and `ecomfe/echarts-gl` do not become separately live through this packet.

They remain retained subordinate support lanes beneath the landed `apache/echarts` owner.

Current portfolio effect:

- curated HyperTwist shallow-eval set: `71`
- currently verified live in checked Unreal surfaces: `9`
- permissive live lanes: `8`
- restrictive live clean-room lanes: `1`
- active non-live implementation-board rows: `50`

## Donor source surfaces read

The source read for this widening remained bounded to the retained analytics, reporting, export, history, accessibility, and subordinate-sidecar domains:

- [README.md](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/README.md:1)
- [LICENSE](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/LICENSE:1)
- [NOTICE](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/NOTICE:1)
- [package.json](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/package.json:1)
- [src/core/echarts.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/core/echarts.ts:1)
- [src/model/OptionManager.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/model/OptionManager.ts:1)
- [src/data/DataStore.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/data/DataStore.ts:1)
- [src/component/thumbnail/ThumbnailView.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/component/thumbnail/ThumbnailView.ts:1)
- [src/component/dataZoom/history.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/component/dataZoom/history.ts:1)
- [src/component/toolbox/feature/DataView.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/component/toolbox/feature/DataView.ts:1)
- [src/component/toolbox/feature/SaveAsImage.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/src/component/toolbox/feature/SaveAsImage.ts:1)
- [ssr/client/src/index.ts](C:/Workspaces/HyperTwist/mirrors/permissive/apache/echarts/ssr/client/src/index.ts:1)
- [src/canvas/Painter.ts](C:/Workspaces/HyperTwist/mirrors/permissive/ecomfe/zrender/src/canvas/Painter.ts:1)
- [src/svg/Painter.ts](C:/Workspaces/HyperTwist/mirrors/permissive/ecomfe/zrender/src/svg/Painter.ts:1)
- [src/chart/common/GLViewHelper.js](C:/Workspaces/HyperTwist/mirrors/permissive/ecomfe/echarts-gl/src/chart/common/GLViewHelper.js:1)
- [src/chart/surface/SurfaceView.js](C:/Workspaces/HyperTwist/mirrors/permissive/ecomfe/echarts-gl/src/chart/surface/SurfaceView.js:1)
- [src/export/charts.js](C:/Workspaces/HyperTwist/mirrors/permissive/ecomfe/echarts-gl/src/export/charts.js:1)

## First-party landing surfaces

The landed first-party Unreal surfaces are:

- [HyperTwistTrainingAnalyticsLibrary.h](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingAnalyticsLibrary.h:1)
- [HyperTwistTrainingAnalyticsLibrary.cpp](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingAnalyticsLibrary.cpp:1)
- [HyperTwistTrainingRuntimeLibrary.h](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h:1)
- [HyperTwistTrainingRuntimeLibrary.cpp](C:/HyperTwist/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp:1)
- [hypertwist-reference-incorporation-targets.json](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/hypertwist-reference-incorporation-targets.json:1)
- [hypertwist-catalog-materialization-summary.json](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/hypertwist-catalog-materialization-summary.json:1)
- [apache-echarts-reference-pages.jsonl](C:/HyperTwist/UnrealHyperTwist/Content/HyperTwistTraining/MaterializedCatalog/raw-extracts/apache-echarts-reference-pages.jsonl:1)

## Landed implementation scope

What landed:

- a first-party compiled analytics-report contract with explicit metric kind, visualization kind, data-point, series, export-surface, report-definition, and bundle types
- a first-party analytics bundle over active training data for session outcome balance, deck-history progress, timing-trend rolling windows, personal-best benchmarking, current-case versus deck comparison, and live split ladders when split data exists
- a first-party runtime-library access layer for the active analytics bundle, individual report lookup, TSV data-view export, live-timer presence, and live-timer state
- bundled first-party reference targets for analytics contracts, export/data-view behavior, timing-trend history, and optional subordinate `3D` analytics sidecar boundaries
- bundled raw source-reference capture for the new `apache/echarts` reference-target families

What that means in practice:

- `apache/echarts` now owns the landed permissive analytics, reporting, and progress-visualization lane in HyperTwist
- the landed surface is a first-party Unreal analytics contract and runtime API, not a vague future donor note
- `ecomfe/zrender` and `ecomfe/echarts-gl` remain explicit support-only lanes beneath this owner rather than separate live product lanes

## Preserved landed value

The donor value that was actually promoted is:

- option and state layering for reporting surfaces
- dataset and series separation for session, deck, case, replay, and split analytics
- history-aware timing-trend inspection and overview behavior
- export, raw data-view, and accessibility-conscious reporting expectations
- SSR-shaped and report-definition-minded browser-companion posture
- explicit subordinate-sidecar boundaries for lower-level `2D` substrate and optional richer `3D` explainers

## Excluded or non-promotion boundary

Do not promote this lane into:

- gameplay, simulation, or puzzle-runtime ownership
- first-party training-data modeling coupled to opaque upstream chart-state assumptions
- a generic BI or dashboard product shell
- separate live-lane claims for `ecomfe/zrender` or `ecomfe/echarts-gl`

Rationale:

- this repo was retained and widened because it was the strongest bounded analytics and reporting donor in the set
- its highest value is disciplined reporting-contract structure, not ownership of HyperTwist's simulation or product shell
- the subordinate packages remain useful precisely because they stay beneath the landed `apache/echarts` owner

## Acceptance markers satisfied

The `2R-B` acceptance markers for this row are now satisfied in first-party Unreal surfaces:

- a first-party analytics dataset schema exists for solves, sessions, splits, drill progression, replay summaries, and live timing state
- a first-party report-definition contract exists with report identity, inputs, aggregation boundaries, and export metadata
- a first-party accessibility and export contract exists for report surfaces
- the subordinate use boundary for `ecomfe/zrender` and `ecomfe/echarts-gl` is now explicit in live code and bundled reference targets

## Validation

Validation completed for this packet:

- `git diff --check` passed apart from CRLF conversion warnings
- JSON validation passed for the updated materialized-catalog files and workspace manifest
- Unreal build succeeded with:
  - `C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat UnrealHyperTwistEditor Win64 Development C:\HyperTwist\UnrealHyperTwist\UnrealHyperTwist.uproject -WaitMutex -NoHotReloadFromIDE`

Build result:

- `Succeeded` on `2026-05-13`

## Next move

The next bounded move is `Phase 3R-D`:

- widen `google/model-viewer` with `KhronosGroup/glTF-Sample-Viewer` as the retained browser presentation, compact editor, and standards-aware asset-QA lane
- keep the newly landed `apache/echarts` analytics and reporting lane on preserve-and-enhance footing rather than treating it as an open donor candidate again
