# HyperTwist Cubing Scramble Successor Surfaces Deep-Source Evaluation - 2026-05-27

## Status

This document is the source-backed evaluation note for the retained cubing
scramble successor surfaces:

- `cubing/mark3`
- `cubing/scramble.cubing.net`
- `cubing/scramble-display`

It answers one narrow question:

- do these successor repos displace the already retained `cubing/cubing.js`
  and `cubing/twisty.js` ownership lanes for scramble generation or
  scramble-operator shells

They do not.

## Source basis

- `C:\Workspaces\HyperTwist\mirrors\permissive\cubing\cubing.js\src\cubing\scramble\index.ts`
- `C:\Workspaces\HyperTwist\mirrors\permissive\cubing\cubing.js\src\cubing\search\cubing-private.ts`
- `C:\Workspaces\HyperTwist\mirrors\permissive\cubing\cubing.js\src\cubing\search\outside.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\README.md`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\package.json`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\src\scramble-generation\index.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\mark3\src\fixtures\testCompetitionScramblesSpec.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\README.md`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\package.json`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble.cubing.net\src\scramble.ts`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\README.md`
- `C:\Workspaces\HyperTwist\mirrors\restrictive\cubing\scramble-display\src\scramble-display\ScrambleDisplay.ts`

## Slice-local verdict

| Slice | Primary authority | Secondary value kept | Route | Width | Result |
|---|---|---|---|---|---|
| Random-state scramble engine and event scramble API | `cubing/cubing.js` | `cubing/mark3`, `cubing/scramble.cubing.net` | existing retained route | existing retained width | unchanged |
| Seeded competition, round, set, and attempt scramble workflow expectations | `cubing/cubing.js` for the engine contract | `cubing/mark3` as fixture/workflow adjunct | `R3` for `mark3` | `F2` | keep `mark3` as bounded adjunct only |
| Public scramble operator shell behavior | `cubing/cubing.js` + `cubing/twisty.js` for engine and visualization seams | `cubing/scramble.cubing.net` as operator-shell adjunct | `R3` for `scramble.cubing.net` | `F2` | keep as bounded shell reference only |
| Lightweight scramble display wrapper behavior | `cubing/twisty.js` | `cubing/scramble-display` as comparison/reference wrapper | `R3` for `scramble-display` | `F2` | keep as comparison surface only |

## Why the ownership does not flip

### `cubing/mark3`

`mark3` does not replace `cubing/cubing.js` for scramble generation.

The current source imports `randomScrambleForEvent` from `cubing/scramble` and
uses it directly inside the round/set/attempt loop. The `README.md` also marks
seed derivation as future work, and `src/scramble-generation/index.ts` still
contains a `TODO` comment for that derivation path.

Retained value that survives:

- competition/WCIF-shaped scramble generation workflow
- round/set/attempt traversal shape
- seeded derivation intent and fixture framing

Value that does not survive as owner displacement:

- the actual scramble engine
- event scramble correctness ownership
- scramble API ownership

Working classification:

- `A2` adjunct donor for competition scramble workflow expectations
- `R3` clean-room route because the row remains restrictive custody
- `F2` only; no broad scramble-engine promotion

### `cubing/scramble.cubing.net`

`scramble.cubing.net` does not replace `cubing/cubing.js` or `cubing/twisty.js`
for the underlying scramble or visualization seams.

The current source imports `randomScrambleForEvent` from `cubing/scramble`,
imports `cubing/twisty`, binds event selection and URL parameters in the shell,
and uses those existing seams to present a public scramble operator surface.

Retained value that survives:

- event-selection behavior
- refresh/rescramble workflow
- URL-state and view-option behavior
- copy-to-clipboard and lightweight operator-shell posture

Value that does not survive as owner displacement:

- scramble engine ownership
- puzzle visualization ownership
- general command-surface ownership for HyperTwist

Working classification:

- `A2` adjunct donor for public scramble operator-shell behavior
- `R3` clean-room route because the row remains restrictive custody
- `F2` only; no shell-family widening by default

### `cubing/scramble-display`

`scramble-display` is a convenience wrapper above `cubing/twisty`, not a new
display owner lane.

The current custom element maps `event` to a `TwistyPlayer`, applies
visualization and background convenience properties, and forwards scramble text
into the already retained visualization seam.

Working classification:

- `A3` reference authority for wrapper convenience only
- `R3` clean-room route because the row remains restrictive custody
- `F2` only; comparison surface, not owner displacement

## Propagation result

### Feature registry

Updated.

The registry now keeps a narrow retained row for seeded competition scramble
workflow and lightweight scramble-operator-shell adjuncts while preserving
`cubing/cubing.js` and `cubing/twisty.js` as the deeper owners.

### Cross-lane doctrine

No doctrine wording change was needed.

The current doctrine already covers this outcome:

- later repos only displace the exact stronger slice
- partial successors stay bounded adjuncts or references

### Retroactive backfill

No selective reopening of earlier packet authority was required.

Reason:

- no earlier `A1` winner was displaced
- this pass only sharpened successor-row interpretation and retained adjunct
  value

### Skillization

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

Reason:

- these repos do not create a first-party HyperTwist command surface
- they do not justify a live skill family by themselves
- any future scramble helper remains command-contract pending until a
  first-party scramble command exists

### Legal evidence

No custody or license-status change occurred in this pass.

The legal tracker and manifest rows were sharpened to reflect the source-backed
upper-surface split, and the generated legal-evidence bundle remained a
verification surface rather than a changed policy surface.
