# Chip retract → spinner → icon strip

Standalone candidate for **`type-chip-retract-expand`**, using the selected
library recipe, five unchanged core files, two existing original-content
inputs, twelve original SVGs and the licensed Geist font. No reference pixels
or source logos appear in the editable composition.

**Status:** two actual Remotion MP4s and a working code/SVG control player;
an exact frame/layer Resolve reconstruction specification, **not an executed
Resolve project**. No moving-source quality approval. Read `SOURCE.md`,
`CONTENT_CONTRACT.md`, `RESOLVE.md` and `VERIFICATION.md` before reuse.

The unpacked kit produces actual movies, but **bit-exact reproduction is not
established**: the default rerender changed decoded frames103–119 despite
matching inputs and pinned tools. That strict check remains failed; the
original critic movies are unchanged. See the measured reproduction report.

## Contents and boundaries

- `src/index.tsx`: one 1920×1080, 60 fps, 120-frame Remotion composition.
- `core/`, `recipes/`, `inputs/`, `public/`: selected, byte-preserved library
  members. `ORIGIN.json` records their archive/member hashes.
- `scripts/controls.mjs`: evaluates the unchanged tracks into **3,360 rows**
  for 28 layers × 120 frames, affine matrices and original SVG control players.
- `generated-controls/` in the source ZIP: those precomputed tables, primitive
  SVGs and self-contained HTML players. They are editable controls, not movies.
- `proof/` in the source ZIP: public-safe measured summaries and limitations.
  Actual movies, decoded PNGs and full render manifests are delivered separately.
- `SHA256SUMS` in the ZIP seals its members. The ZIP itself has a separate seal.

The ZIP is source-only in the sense of **code, JSON/CSV, SVG/HTML, documentation
and a licensed font**, not source-video footage, render footage, PNG plates,
node_modules, browser binaries or native `.drp` files. The TTF is explicitly
included with its OFL license; it is not recovered source-film typography.

## Existing runtime prerequisites

No installation step is provided or authorized. Use an already installed
environment matching `toolchain.json`: Node v24.13.1, Remotion 4.0.520,
React 19.2.8, TypeScript 5.9.3 and full Chrome for Testing 152.0.7977.42.
The renderer checks the **ELF bytes** and version, not a shell launcher.
FFmpeg, FFprobe, `flock`, Python and an existing Pillow environment are needed
for actual-output checks. Pillow 12.3.0 was used for the delivered evidence.

Supply these absolute environment paths before running commands:

| Variable | Required existing resource |
| --- | --- |
| `CHIP_SHARED_NODE_MODULES` | Read-only Remotion verification project's `node_modules` |
| `CHIP_CHROME` | Full Linux Chrome ELF, not the `chromium` shell wrapper |
| `LD_LIBRARY_PATH` | Host-supplied Chrome runtime `usr/lib/x86_64-linux-gnu` and `lib/x86_64-linux-gnu` directories |
| `TMPDIR` | Authorized shared run temporary directory |
| `CHIP_WORKER` | Dedicated off-repository worker directory; **100 MiB maximum** |
| `CHIP_STORAGE_GUARD` | Existing bounded-run `storage_guard.py` |
| `CHIP_ENCODER_LOCK` | Existing shared `encoder.lock` |
| `CHIP_PYTHON` | Existing Python executable with Pillow; no new environment |
| `CHIP_SOURCE_EXCERPT` | Retained 960×540, silent two-second source excerpt, matching `source-clock.json` |

The local coordinator handoff supplies concrete paths; none are embedded in
this public-safe package. Source masters stay local and are not a dependency
of the editable composition. No package install, dependency copy, symlink,
browser download, publication or registry update is part of these commands.

## Executable commands

Run from the extracted kit directory. Every output directory must be new.
The scripts refuse existing outputs rather than overwrite prior evidence.

```bash
export PYTHONDONTWRITEBYTECODE=1
scripts/run.sh typecheck
scripts/run.sh test
"$CHIP_PYTHON" -B tests/test_verify.py
scripts/run.sh controls "$CHIP_WORKER/controls-new"
scripts/run.sh render default "$CHIP_WORKER/default-new"
scripts/run.sh render adaptation "$CHIP_WORKER/adaptation-new"
"$CHIP_PYTHON" -B scripts/verify.py \
  --default "$CHIP_WORKER/default-new/render.mp4" \
  --adaptation "$CHIP_WORKER/adaptation-new/render.mp4" \
  --source "$CHIP_SOURCE_EXCERPT" \
  --out "$CHIP_WORKER/verification-new"
```

`run.sh render` acquires the shared encoder lock. The external ESM loader and
Webpack module/loader resolution use the existing dependency directory in
place. Cache is disabled, bundling stays in the new worker output, and only
that invocation's scratch directory is removed. Encoded frames are not an
input to either Remotion or the SVG player.

`verify.py` independently decodes all three actual MP4s, checks exact rational
PTS and silence, then measures icon onsets and the fading label in the decoded
pixels. It retains consecutive comparison sheets. Its source column is the
540p excerpt, explicitly not a reconstruction of missing native PNGs.
For a future actual Resolve pair, the same command with `--native` skips only
the Remotion manifest binding; timing, decode and image checks still run.
That flag is not proof that Resolve produced a caller-supplied file.

## Use the standalone SVG version

Open `generated-controls/default-svg-player.html` or
`generated-controls/adaptation-svg-player.html` from the ZIP in full Chrome.
No server, external font request or dependencies are required. Play at 1× or
0.25×, scrub an integer local frame, or **Save current SVG**. The saved SVG
contains original paths, live text, the font, masks and transforms—not a
bitmap. For edited inputs, regenerate with the `controls` command.

The SVG backend is separately implemented from the unchanged CSS-based core.
Its font baseline is measured in Chrome; its 14 inspected checkpoints per
variant do not establish pixel equality to Remotion or compatibility with a
native SVG importer. Do not silently rasterize it for the Resolve route.

## Reuse policy

Change only the supported content fields in `inputs/`, then regenerate,
render and review the new pair. The frame tracks, aspect ratio and duration
are not content parameters. The reference remains a research source, not
production media or evidence of real product behavior. A future all-hands
presentation still requires its recording-based storyboard review.
