# YSD-19025 — What a fresh install bundles for the cold start

- **Status:** approved (2026-08-15)
- **Priority:** EXT — non-blocking for the seed registers, blocking for the
  offline first pass
- **Decision owner:** @GreyChimp
- **Drafted:** 2026-08-15 by Claude Code (Opus 5)
- **Approval:** ruled by @GreyChimp on 2026-08-15; outcome recorded in
  decision-log.json; review by 2027-08-15

## Question

`coldStartOfflineReadiness` reported that no corpus part carries the cold start:
all nineteen parts were `remote-fetch` and every one of them optional, so a
fresh install's first pass rested on a network call and the readiness report was
a universal over an empty set. What does a fresh install ship?

## Recommendation

Bundle one complete short film plus its licence artefacts, so the player,
timeline and frame-pinning paths work offline on first run.

## Ruling

Approved by @GreyChimp on 2026-08-15: **bundle Sintel** — `sintel-render-1080p`,
`residence: 'bundled'`, `requiredForColdStart: true` — and accept the 1.18 GB
install cost.

The size was ruled on knowingly, after a cheaper option was priced and rejected.

## Options considered

- **Elephants Dream 480p (99 MB)** — the obvious choice on size, and rejected on
  accessibility. YSD-14179 refuses a required moving image with no audio
  alternative, because the cold start is the one path with no alternative route.
  ED's published container carries **no subtitle stream** (probed), nothing is
  published beside it in `download.blender.org/ED/` (directory listed), and the
  corpus's two candidate subtitle sets were already declined as third-party
  contributions — one of the Tears of Steel files is named "please-review", and
  every Pioneer One filename ends "Addic7ed.com". A cheaper cold start would
  have been an inaccessible one.
- **The paper trail only** — rejected by the owner: documents need no audio
  alternative and would have passed easily, and the first pass would then
  exercise none of the time-based paths the workspace is for.
- **Nothing bundled; record that first run needs the network** — rejected: it
  states the problem rather than solving it.
- **Sintel, 1.18 GB** — approved. It is the only film in this corpus whose
  **licensor-published container** carries an English caption track: ten
  subtitle streams ride inside the MKV the Blender Foundation publishes and
  states an MD5 for. The 720p is offered only as a 681 MB zip, so 1080p is also
  the smallest form of the film that carries them.

## Consequences

- **The corpus gained a way to say that a track lives inside a part.**
  `embeddedTracks` on a part declaration, with `EmbeddedAccessibilityTrack`
  modelling stream index, kind, language and codec. The alternative was one of
  two lies: a fabricated caption part whose bytes are a stream nobody publishes
  at a URL, or a report that a film shipping captions ships none. The rule that
  an alternative must be its own declared work is about a file somebody else
  wrote, and it does not reach a stream inside the licensor's own release.
- **The declaration is probed, not trusted.**
  `open-corpus-tracks.network.spec.ts` runs ffprobe against the published
  locator and requires the declared index to be a subtitle stream of the
  declared codec and language. Declaring stream 2 instead of stream 3 fails it —
  that index is the German track.
- **One accessibility gap remains and is reported rather than absorbed.** Sintel
  ships no audio description, no corpus film does, and writing one is original
  work by a person. `seedAccessibilityIssues` still refuses on that ground, and
  a spec asserts both halves: with the embedded track the captions issue is
  gone, without it the captions issue returns. A cold start that reported itself
  accessible here would be telling a blind learner it had a route it does not
  have.
- **The seed reports are now tested against the catalogue that ships.** Every
  seed assertion in the library ran over hand-built manifests until this change,
  which is why the empty-set defect survived for months.

## Machine-enforced outcome

Exactly one part carries the cold start, it is bundled rather than fetched, its
captions come from inside the licensor's own container, and the
audio-description shortfall still refuses.

## Control in force

`coldStartOfflineReadiness` no longer raises `nothing-carries-the-pass`, and
`seedAccessibilityIssues` still returns a blocking issue for the missing audio
description. Both are asserted over `OPEN_CORPUS_CATALOG` rather than a fixture.
