返回 CodeWhale
v0.9.2-media-plan.md
根目录 / docs / releases / v0.9.2-media-plan.md
1 # v0.9.2 real-session media plan (#4906)
2
3 > **Status: pending the dogfood recording.** The site renders a visible
4 > "recording pending release candidate" state (`web/lib/media-manifest.ts` →
5 > `first-fleet-session`, rendered by `web/components/session-media.tsx` on
6 > `/docs/guide`). No placeholder, staged, or recycled footage ships. This file
7 > is the exact procedure for producing the real assets once the v0.9.2 release
8 > candidate is stable and dogfooded, and the checklist for flipping the
9 > manifest entry to `published`. It authorizes local recording only — never a
10 > deploy, tag, or publication.
11
12 ## What gets recorded
13
14 One continuous real session of the v0.9.2 release candidate, on a **sealed
15 local route** (loopback Ollama, exactly like the canonical screenshot in
16 `docs/public-surface-facts.json` → `screenshot.capture`; no paid or hosted
17 provider, no live account):
18
19 1. Install / launch: `codewhale` in a scratch repository.
20 2. First keyless session: constitution-first setup, then a read-only Plan-mode
21 exploration.
22 3. Provider connection: configure the local Ollama route (provider · model ·
23 reasoning tier visible).
24 4. One Fleet workflow: `codewhale fleet init`, a small `fleet run`, and the
25 receipt at the end.
26
27 Terminal: **120×32**, **Blue Stage dark** theme — identical to the screenshot
28 contract so the moving and still surfaces read as one product.
29
30 ## Recording procedure (post-dogfood, exact commands)
31
32 Prerequisite: the candidate has passed the local dogfood install per the
33 release ledger (`scripts/release/install-dogfood.sh`). Seal the environment —
34 never record against a real home directory or live credentials:
35
36 ```sh
37 # 1. Sealed scratch environment
38 export CW_MEDIA_HOME="$(mktemp -d)"
39 mkdir -p "$CW_MEDIA_HOME/.codewhale" /tmp/cw-media-demo && cd /tmp/cw-media-demo
40 HOME="$CW_MEDIA_HOME" CODEWHALE_HOME="$CW_MEDIA_HOME/.codewhale" \
41 env -u DEEPSEEK_API_KEY \
42 tmux new-session -d -s cw-media -x 120 -y 32
43
44 # 2. Start the local inference route (separate shell)
45 ollama serve & # loopback only; model pulled in advance, e.g. `ollama pull <model>`
46
47 # 3. Record with VHS (same tool as the canonical screenshot)
48 # Write the tape to docs/evidence/v092-first-fleet-session.tape, replaying
49 # the four beats above, then:
50 vhs docs/evidence/v092-first-fleet-session.tape
51 # → produces the GIF fallback
52
53 # 4. Derivatives
54 ffmpeg -i first-fleet-session.gif -movflags +faststart -pix_fmt yuv420p \
55 -vf "scale=1280:720" -an web/public/media/first-fleet-session.mp4
56 ffmpeg -i first-fleet-session.gif -frames:v 1 \
57 web/public/media/first-fleet-session.png # poster frame
58 cp first-fleet-session.gif web/public/media/first-fleet-session.gif
59 ```
60
61 Then hand-write the caption tracks and transcript from the actual recording
62 (never auto-generated filler):
63
64 - `web/public/media/first-fleet-session.en.vtt` and
65 `web/public/media/first-fleet-session.zh.vtt` — WebVTT, one cue per beat.
66 - `docs/evidence/v092-first-fleet-session-transcript.md` — the full command
67 and receipt transcript, with the same evidence-standard header as
68 `docs/evidence/v091-empty-work-surface-receipt.md`.
69
70 ## Acceptance checklist (flip `status` to `published` only when every box is true)
71
72 - [ ] Recorded from the **exact release-candidate SHA** named in the v0.9.2
73 completion ledger, after `install-dogfood.sh`, in a sealed
74 `HOME`/`CODEWHALE_HOME`.
75 - [ ] Sealed local route only — no hosted provider, no account, no credentials
76 visible anywhere in the footage.
77 - [ ] Poster is a real frame of the recording, PNG, **1280×720**, ≤ **500 KB**
78 (`MEDIA_BUDGETS.poster`).
79 - [ ] Video is **1280×720**, ≤ **120 s**, ≤ **10 MB** (`MEDIA_BUDGETS.video`).
80 - [ ] GIF fallback ≤ **6 MB** (`MEDIA_BUDGETS.gifFallback`); it is offered as
81 a download link, not described as a static reduced-motion substitute.
82 - [ ] Captions: `en` and `zh` WebVTT tracks, non-empty, cues match the actual
83 session beats.
84 - [ ] Transcript committed under `docs/evidence/` and referenced from the
85 manifest entry.
86 - [ ] `web/lib/media-manifest.ts`: set `status: "published"` and fill `poster`,
87 `video` (with measured `durationSeconds`), `captions`, `gifFallback`,
88 `transcript`. No other manifest change.
89 - [ ] Web gates green locally:
90 `npm ci && npm run prebuild && npm run check:facts && npm run check:docs && npm test && npm run lint && npm run build`
91 (the media-manifest test checks file presence/bytes and PNG poster
92 dimensions; verify actual video dimensions/duration here with media
93 inspection before changing the manifest status).
94 - [ ] README GIF swap (same recording) is a **separate** commit updating
95 `docs/public-surface-facts.json` provenance — not part of this flip.
96 - [ ] **No deploy.** `app.codewhale.net`/codewhale.net deployment stays
97 manual-dispatch and Hunter-gated per the release ledger.
98
99 ## Sign-off
100
101 Recording, checklist, and manifest flip are maintainer-verified (Hunter)
102 before the entry ships. The pending state on the site is correct until then.
103
103 lines MARKDOWN