# HyperTwist Replay Shell And Viewer Timeline Hierarchy Reconciliation - 2026-05-27

## Status

This document is the source-backed reconciliation note for the current replay
shell and viewer timeline family across:

- `cubing/twisty.js`
- the landed first-party `HyperTwistSimulation` owner lane
- the landed `cubing/cubing.js` and `cubing/alg.js` owner lanes consumed
  read-only by this shell
- the landed browser viewer and browser spatial support lanes that must not be
  silently absorbed

It answers one narrow question:

- does the current `cubing/twisty.js` source require reopening the landed
  bounded first-party replay-player and visualization owner lane before any
  future shell or consumer packet is considered

Result:

- no product-code reopening is required
- yes selective authority backfill is required so candidate-era metadata no
  longer understates the already-landed replay shell and visualization lane
- the exact current owner slice remains narrow: player shell, cursor/timeline
  transport, adapter/bootstrap, and local visualization/fallback presentation
  behavior

## Source basis

- `C:\HyperTwist\docs\HYPERTWIST_PHASE_0R_PACKET_0R_D_EVALUATION_2026-05-13.md`
- `C:\HyperTwist\docs\REPO_LICENSE_TRACKING.md`
- `C:\HyperTwist\docs\v6_5_deep_manual_pack\HyperTwist\FEATURE_REGISTRY.md`
- `C:\Workspaces\HyperTwist\repos.manifest.json`
- `C:\Workspaces\HyperTwist\clean-room-specs\cubing-twisty-js.model-a.md`
- `C:\Workspaces\HyperTwist\clean-room-specs\outputs\cubing-twisty-js.model-b-reconciled.md`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\README.md`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\twisty.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\widget.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\anim.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\cursor.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\puzzle.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\3D\twisty3D.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\twisty.js\src\3D\cube3D.ts`
- current first-party runtime and test authority under:
  - `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Public\HyperTwistSimulation`
  - `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Private\HyperTwistSimulation`
  - `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Tests\HyperTwistTwistyBound1ReplayShellTest.cpp`
  - `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Tests\HyperTwistTwistyBound3AdapterBootstrapTest.cpp`
  - `C:\HyperTwist\UnrealHyperTwist\Source\UnrealHyperTwist\Tests\HyperTwistTwistyBound4VisualizationTest.cpp`

## Slice-local verdict

| Slice | Primary authority | Secondary value kept | Route | Width | Result |
| --- | --- | --- | --- | --- | --- |
| Replay player shell, cursor/timeline transport, scrubber/control bar, and embedded host bootstrap above landed replay inputs | first-party `HyperTwistSimulation` lane grounded in `cubing/twisty.js` | `cubing/cubing.js` and `cubing/alg.js` remain read-only adjacent owners | `R3` | `F2` | unchanged live implementation owner |
| Visualization shell, `2D/3D` selection, fallback policy, and fullscreen/expanded presentation | first-party `HyperTwistSimulation` lane grounded in `cubing/twisty.js` | landed browser support lanes remain adjacent support surfaces | `R3` | `F2` | unchanged live implementation owner |
| Classic-cubing semantic ownership, parser/AST ownership, and broader browser-viewer or browser-spatial ownership | adjacent landed lanes | none required from `cubing/twisty.js` | existing adjacent routes | `F2` | unchanged adjacent owners |

## Why no product-code reopening is required

### `cubing/twisty.js`

The donor still owns the narrow replay/player shell center of gravity:

- compact player-shell composition
- observer-driven playback and cursor transport
- puzzle-adapter boundary
- embedded host bootstrap
- local `2D/3D` visualization shell and fallback presentation behavior

That retained slice remains correct. It does not widen into classic-cubing
semantic ownership, parser ownership, or generic browser substrate ownership.

### Landed first-party owner lane

The first-party owner lane is already live and closed in current code:

- public owner surfaces exist under `Public/HyperTwistSimulation`
- private implementation surfaces exist under `Private/HyperTwistSimulation`
- the current owner is expressed through `UHyperTwistPuzzleViewerComponent`,
  `UHyperTwistViewerLibrary`, and the bounded simulation/viewer type families
- the repo-local reconciled note already records `Bounds 1-4 closed`
- focused automation exists for the replay shell, adapter/bootstrap, and
  visualization/fallback slices

That means the same-bound owner work is already landed. This pass does not find
an owner-side gap that justifies reopening it.

### Current adjacent owner boundaries

The current adjacent-owner split is also still correct:

- `cubing/cubing.js` remains the landed classic-cubing semantic and geometry
  owner consumed read-only by this shell
- `cubing/alg.js` remains the landed algorithm-language owner consumed read-only
  by replay/player behavior
- the landed browser support lanes remain support surfaces beneath the local
  shell rather than competing player-shell owners

Those boundaries do not need to be reopened for this lane.

## Selective backfill result

### Earlier packet reopened

- `C:\HyperTwist\docs\HYPERTWIST_PHASE_0R_PACKET_0R_D_EVALUATION_2026-05-13.md`

### Earlier standing note reopened

- `C:\Workspaces\HyperTwist\clean-room-specs\cubing-twisty-js.model-a.md`

### Manifest row reopened

- `C:\Workspaces\HyperTwist\repos.manifest.json`

### Additional canon reopened

- `C:\HyperTwist\docs\REPO_LICENSE_TRACKING.md`
- `C:\HyperTwist\docs\v6_5_deep_manual_pack\HyperTwist\FEATURE_REGISTRY.md`

### Reason

The landed lane itself was already correct. The stale part was the metadata:

- the canonical `Model A` handoff still described the row as not yet verified
  live
- the manifest row still preserved the older reset-era wording
- the tracker and registry were still too compact to express the exact narrow
  landed owner slice and the adjacent-owner split cleanly

### Change class

- repo-local extraction did not change
- landed owner interpretation was confirmed rather than reversed
- dependent canon was sharpened so the lane stays narrow and clearly closed
- no product-code change occurred

### What remained valid

- the restrictive `GPL-3.0-or-later` clean-room route remained valid
- the original `0R-D` decision to keep `cubing/twisty.js` separate from
  `cubing/cubing.js` custody remained valid
- the repo-local `Bounds 1-4 closed` conclusion remained valid

### What changed

The dependent canon now makes the current landed role explicit:

- keep `cubing/twisty.js` grounded first-party ownership inside
  `HyperTwistSimulation`
- keep classic-cubing semantics with `cubing/cubing.js`
- keep parser and AST ownership with `cubing/alg.js`
- keep broader browser-viewer and browser-spatial ownership with the landed
  browser support lanes
- do not reopen the closed `Bound 1` through `Bound 4` sequence by default

## Propagation result

### Feature registry

Updated.

The registry now says what is actually live: first-party replay/player shell
and visualization ownership is real for player shell, cursor/timeline
transport, adapter/bootstrap, and fallback/fullscreen presentation behavior.

### Cross-lane doctrine

No doctrine wording change was needed.

This pass applied the existing `A/R/F` hierarchy; it did not change the
hierarchy rules themselves.

### Skillization

No doctrine or `SKILLS.md` change was needed.

This pass did not create or reopen any command or skill surface.

### Legal evidence

No license-status or mirror-custody change occurred.

The repo-row tracker, feature registry, manifest row, and canonical handoff
status were sharpened instead.

## Operational answer

Before any future replay-shell, visualization-shell, or broader consumer packet
is considered, the correct move was this authority backfill first.

After this pass:

- do not reopen `Bound 1`, `Bound 2`, `Bound 3`, or `Bound 4`
- do not reinterpret adjacent owner consumption as a same-bound owner gap
- if later work is justified, scope it as a new consumer-owner or shell packet
  above the closed replay/player owner lane
