Skip to content

Render every video from a VideoSpec (segment() switch-over) - #207

Merged
davior merged 1 commit into
mainfrom
claude/admiring-tesla-breov5
Oct 15, 2026
Merged

davior merged 1 commit into
mainfrom
claude/admiring-tesla-breov5

Conversation

@davior

@davior davior commented Oct 15, 2026

Copy link
Copy Markdown
Owner

Hold before merging: an adversarial parity review of the spec path is still running: two agents are trying to find any note that the spec path renders differently. Once it reports, I'll fold in anything it confirms and then mark this ready.

Summary

This is the second Phase 0 step in docs/gecko-video-creator.md, after #206.

  • segment() now goes through the VideoSpec. It imports the note as a spec (importer.py) and compiles it back to shots (compiler.py). Every render and every estimate is now built from a spec. The old walk and _bumper_shot are deleted from the app. segmenter.py keeps the Shot model and the block-reading helpers both sides use.
  • POST /api/video/spec returns the spec for a note. It takes the same body as /estimate, so a selection and the dialog's options shape it exactly as they would a render. Nothing is rendered or stored.
  • The original walk is kept verbatim as the reference copy in backend/tests/segment_reference.py. Every segmenter case, the 3,000 generated notes and real render() runs (ffmpeg faked) still have to match it exactly. When the planned chapter-mark fixes land, they change both together, or the reference copy is retired.
  • The doc's Phase 0 status is updated.

No behaviour changes: the same shots, warnings and ffmpeg commands as before, held by the tests above.

Test plan

  • pytest -q from backend/, as CI runs it: 1,285 passed, 1 skipped (that skip was already there).
  • The 68 segmenter tests now run directly against the spec path and pass unchanged.
  • Endpoint tests:
    • it returns a valid spec with provenance
    • a selection and the options shape it
    • another user's note gets a 404
    • invalid options get a 400
  • Adversarial parity review reports clean, or its findings are fixed.
  • CI green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PwaujUokXQAxnebBArpZuj


Generated by Claude Code

segment() now imports the note as a VideoSpec and compiles it back to
shots, so the spec is what every render and estimate is built from; the
old walk is gone from the app. POST /api/video/spec returns that spec
for a note, taking the same body as /estimate.

The original walk is kept verbatim in tests/segment_reference.py as the
oracle: every segmenter case, the generated corpus and real render()
runs (ffmpeg faked) must still match it exactly. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PwaujUokXQAxnebBArpZuj
@davior
davior marked this pull request as ready for review October 15, 2026 00:50
@davior
davior merged commit bb5f633 into main Oct 15, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants