# Dock subtraction: selected source kit

Candidate for `type-dock-subtraction`, source `Ej6hnsQgV_c`, current accepted
binding `fresh-repair06`. This package contains editable code, original SVG
artwork, Remotion source, a frame-addressable browser control, and a
recipe-specific Resolve assembly guide. It contains **no movies, screenshots,
PNG sequences, fonts, dependency installation, or native Resolve project**.

The source-only archive is intentionally separate from the three frozen movies
and prepared PNG inputs. `PUBLIC_PROOF.json` identifies those external artifacts
by role, relative path, SHA-256, dimensions and frame count. It does not claim
that files absent from this archive are bundled. Paths in that proof are relative
to the separately supplied worker artifacts, not this public directory.

**Wins remain native Resolve 0 / moving 0 / source 0.** Fresh rendering,
integrity checks, automated playback and selected still inspection do not award
source fidelity. The independent critic and native-source archive are separate
coordinator responsibilities; this kit does not retrieve or package them.

## What is fixed

- Source metadata: *Introducing ChatGPT Atlas*, OpenAI, October 21, 2025. The
  recorded upload date is inside the inclusive September 5, 2024–September 5,
  2026 window. The raw source film was not rehashed during this build.
- Native interval **[0,99)** at **30/1 fps**: 3.3 seconds, 1920 × 1080 recipe
  canvas, zero added before/after dwell. The separate research excerpt is the
  accepted 960 × 540 downsample, silent and hash-bound.
- Blank frames 0–2; five objects at 3; sixth at 24; pair removals at 61 and 67;
  dock and object 2 removed at 74. Object 3 survives through 98. Late per-frame
  position/scale settling is preserved, not replaced by a freeze.
- The two replays use the accepted original SVG families, not newly invented
  artwork: document/book/cube/kite/planner/dial and
  landscape/badge/mountain/T/board/compass. The new work is the actual rebuild,
  standalone controls, preparation path, ledgers, gates and handoff.
- White repair06 canvas and the refinement02 default object-5 asset remain
  selected. The earlier repair contracts are historical provenance; the
  repair06 recipe and current asset bindings are authoritative.

## Files to start with

| Purpose | Path |
| --- | --- |
| Editable code/SVG browser control | `index.html` |
| Current recipe and exact tracks | `project/recipes/type-dock-subtraction.json` |
| Typed seven-field content API | `project/examples/type-dock-subtraction/input.ts` |
| Twelve selected original SVGs | `project/public/art/type-dock-subtraction/` |
| Sixteen standalone SVG control frames | `controls/`; exact inventory in `controls/index.json` |
| Every output/source frame, including raw PTS | `source-clock.csv` — 99 rows |
| Every variant/layer/frame state | `resolve-keyframes.csv` — 1,386 rows |
| Six construction/subtraction phases | `resolve-cuts.csv` |
| Resolve tracks, parameters, alpha and cut guide | `RESOLVE.md` |
| Current download/member bindings | `bindings.json` |
| Rebuild environment pins | `environment-spec.json` |
| Integrity and candidate limitations | `PUBLIC_PROOF.json`, `VERIFICATION.json` |
| Complete source-only inventory and hashes | `SOURCE-INVENTORY.json`, `SHA256SUMS` |

The SVG controls use Gaussian shadow approximations. The browser control,
Remotion implementation and dock raster preparation use the repaired CSS
shadow. Do not promote those approximations to a source-parity claim.

Serve this source directory through a local HTTP server to use `index.html`;
opening it through a file URL cannot reliably fetch the recipe and SVG files.
The control page contains no source movie and makes no new product/UI claim.
`Play once` runs the native 99-frame sequence; the range control addresses any
frame directly. This is a code control, not evidence that a movie played.

## Reproduction prerequisites

Use an **existing** Python 3.10+ environment and the exact Node/browser/direct
dependency versions in `environment-spec.json`. The pinned render used Node
24.13.1, Remotion 4.0.520, and full Linux x64 Chrome for Testing 152.0.7977.42.
No npm install, dependency copy, symlink, browser download or full-stage copy is
part of this workflow. Dependencies and browser remain external.

The unchanged Remotion `FontGate` requires `public/fonts/Geist.ttf` even though
this recipe has no visible text layers and its SVG glyphs are paths. The font
is a checked runtime input from the core archive, with its OFL license; it is
not smuggled into a code/SVG-only ZIP. Both renders recorded a successful local
font response. No typography-fit or font-free-runtime claim is made.

Set these environment values to caller-owned local paths:

| Variable | Meaning |
| --- | --- |
| `DOCK_SHARED_NODE_MODULES` | Existing read-only dependency directory |
| `DOCK_WORK` | Separate output/work directory with an existing parent |
| `TMPDIR` | Existing authorized temporary directory |
| `LD_LIBRARY_PATH` | Existing shared-library directories required by Chrome |
| `REMOTION_BROWSER_EXECUTABLE` | Full Chrome ELF binary, not a wrapper or shell |
| `ENCODER_LOCK` | Existing shared encoder lock file |
| `CORE_ZIP` | `core-publication-v08.zip` |
| `BASE_ASSETS_ZIP` | `assets/type-dock-subtraction/assets-001.zip` |
| `REPAIR_ASSETS_ZIP` | `assets/type-dock-subtraction/fresh-repair06/assets-001.zip` |
| `DOCK_ACCEPTED_DOWNLOADS` | Read-only parent directory of those three archives, for missing-input tests |

All three archives are required. `bindings.json` pins each complete archive
inventory/hash and every selected runtime member. `kit.py prepare` validates
all inputs **before extraction**, then selects exactly 52 runtime files. It
does not silently choose the older base icons. The checked base pack is kept
in the prepared runtime only; the twelve currently selected SVGs are in this
source kit. Core source and current repair source were compared byte-for-byte
for every selected overlapping member before either movie was rendered.

```sh
python3 -B kit.py prepare --work "$DOCK_WORK" --core "$CORE_ZIP" \
  --assets "$BASE_ASSETS_ZIP" --repair "$REPAIR_ASSETS_ZIP"
node typecheck.mjs "$DOCK_WORK/project"
```

After a new render is explicitly authorized, a **new** work directory can use:

```sh
python3 -B execute.py --work "$DOCK_WORK" --browser "$REMOTION_BROWSER_EXECUTABLE" \
  --lock "$ENCODER_LOCK" --action render
python3 -B execute.py --work "$DOCK_WORK" --browser "$REMOTION_BROWSER_EXECUTABLE" \
  --lock "$ENCODER_LOCK" --action prepare
```

The existing worker is frozen. Its `finalization-budget.json` disables these
commands and browser inspection there. This finalization started no encodes,
browser sessions or new sheets. The earlier `execute.py` allocator uses an
advance reserve and sampled watchdog, not a kernel quota. Finalization adds
a separate 10 MiB cap over its recorded starting footprint.

`run.mjs` renders the two pinned examples. New artwork requires explicit inputs,
new rendering and fresh review; it cannot inherit this pair's proof. The
unchanged core CLI is available in the prepared runtime for future authorized
content work. Do not edit the shared or current repaired renderer to make an
unsupported input fit.

## Existing-artifact checks

These commands do not render movies or start a browser. Python's replay check
decodes frames to in-memory checksums only; it writes no images or new media.

```sh
node --experimental-strip-types --test test_contract.mjs
python3 -B test_gate.py
python3 -B test_release.py
node --experimental-strip-types verify-native.mjs "$DOCK_WORK"
python3 -B verify.py --work "$DOCK_WORK"
python3 -B release.py check --work "$DOCK_WORK"
```

Keep Python bytecode disabled when checking a sealed source tree. The gate
requires exact unique inventories, variant labels, integer zero dwell,
successful bound font responses, the pinned browser claim, and all required
inputs. Missing archives fail before extraction. Extra fields, duplicate rows,
boolean/float dwell, swapped variants and unsupported quality claims fail.

The release checker reads the ZIP without extracting it. It verifies every
member, the exact source inventory, manifest checksums, and absence of binary
media/dependencies and private-path/credential patterns. These are unsigned
integrity checks, not an authorship signature or comprehensive security audit.

## Delivery and review limits

The source ZIP is content-addressed, read-only and accompanied by a SHA-256
sidecar and an exact member count. A local `release.json` outside the archive
records its hash and allocation receipt. Public proof exposes no worker home
path or private server. No registry change, deployment or publication is done.

The three existing boundary sheets were opened during finalization, using
frames 2,3,23,24,56,60,61,66,67,73,74,98 at reduced display size. They show the
blank entry and selected construction/removal states; they do not inspect
every frame at full resolution. Earlier automated 1× playback reported
99 presented frames and zero drops for each movie. It is not human continuous
watching, a fresh independent critique, or a source win.

Full-resolution source coverage and the coordinator's separate native archive
remain outside this handoff. Resolve import, alpha interpretation, interpolation,
filtering and color handling remain unverified. No all-hands production or
presentation synchronization approval is implied.
