From an independent review of the branch: - Regression: existing non-raster-but-showable visuals (.svg diagrams) were dropped by the renderable filter — they were served fine before via <img> (/thumb passes SVG through). Add .svg to MEDIA_IMAGE_EXT. - Doc accuracy: the board dedupes decisions by (category, subject), not category alone (category-only would wrongly merge distinct decisions that share a category, e.g. TTS vs image provider_selection). Correct AGENT_GUIDE to say the pair is the key and to reuse the same subject when re-logging. - Coverage: the new visual-selection logic was untested (which let the earlier missing-file regression through). Add TestStoryboardVisualSelection covering the .tsx-animation exclusion, snapshot fallback (exact + <id>_* match), SVG renderability, the preserved missing-file indicator, and takes = renderable. Not changed (reviewed, deliberate): .narr clamp at --fs-scale 1.16 degrades gracefully via the fade + click-to-expand modal; decision dedupe stays keyed on (category, subject) as the more-correct behavior.
Backlot — the living storyboard
A read-only local board that shows a production happening: pipeline stages
lighting up, the script as a screenplay page, the scene plan as a filmstrip
that fills in as assets generate, decisions, spend, and activity — all
derived from what the pipeline already writes to projects/<id>/.
python -m backlot open <project-id> # start server if needed + open browser
python -m backlot open # library view (all projects)
python -m backlot serve --port 4750 # run the server in the foreground
How it stays live
No agent involvement. A watchfiles watcher on projects/ publishes change
notifications over SSE; the browser refetches board state. State sources:
| Board element | Disk source |
|---|---|
| identity / rail order | project.json + pipeline_defs/<type>.yaml |
| stage states, gates, versions | checkpoint_<stage>.json + history/ |
| script card / modal | artifacts/script.json |
| filmstrip cards | scene_plan × script × asset_manifest join |
| generating shimmer, activity | events.jsonl (written by BaseTool instrumentation) |
| cost meter | checkpoint cost_snapshot |
| renders | renders/*.mp4 (+ root-level mp4 heuristic) |
Projects without checkpoints degrade gracefully to a "what the watcher found" view — media, snapshots, renders.
Replay: a completed run can be scrubbed end-to-end (▶ REPLAY RUN on the board) — reconstructed from checkpoint history and event timestamps.
Try it without a real production:
python scripts/backlot_simulate_run.py # live demo run (~1 min)
python -m backlot open backlot-demo-run
Design doc: internal/design/LIVING_STORYBOARD.md.