feat: world-class agent-run film — scoreboard, true orbit, cinematic bookends#1
Merged
Conversation
…, cinematic bookends Turn the composed film into a directed, beat-matched piece on a real CAD eval trace (brief → author OpenSCAD → compile → render → geometry gate RESOLVED 1.0). - renderScoreboardHtml(result): the verdict payoff — each geometry check streams in one-by-one with a stroke-drawn ✓, a tally counts up, landing on a big "N/N — RESOLVED · score X.XX" with the measured bbox / triangles / volumes readout. EvalResult type + scoreboardDurationMs so the composition sizes the slot. Wired into autoCompose via opts.result and threaded through runToVideo + the CLI --result flag. - renderIntroHtml / renderOutroHtml: kinetic word-by-word titles, brand wordmark, animated aurora gradient + vignette, mission framing on the intro and outcome stat chips on the outro. Replaces the plain card bookends. The intro subtitle is condensed to the brief's lead line; the outro never shows raw artifact source (e.g. the .scad) — it states the outcome cleanly. - renderImageRevealHtml: clean A/B crossfade — a buffer's src is overwritten only after its opacity reaches 0, so two distinct frames are never partly visible at once (eliminates mid-fade ghosting). Equal-and-opposite opacity ramp holds constant luminance through the dissolve. - renderCompositionHtml: the final shot is never auto-hidden; the film ends when that shot's iframe reports its done-signal (polled via contentDocument), with the scheduled total as a ceiling — so the outro fully lands regardless of timer drift. Shots crossfade-overlap so no black gap sits between cuts. - Narration closes on the gate verdict when a result is given. Tests: 17 added covering the scoreboard verdict/fail paths + duration scaling, the crossfade no-overwrite invariant, the bookend kinetic/stat markup, autoCompose scoreboard gating + intro/outro content discipline + overlap pacing + the final-shot done-signal, and verdict-aware narration. 41/41 pass. Verified end-to-end on /tmp/cad-trace-learned.json: 32s film, video+audio muxed, 36-azimuth OpenSCAD orbit, every shot frame-checked.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrade the composed film from "decent" to launch-grade, verified frame-by-frame on a real CAD eval trace.
renderers/scoreboard.ts): each geometry-gate check streams in with a stroke-drawn ✓, a count-up tally, and lands on a big "7/7 — RESOLVED · score 1.00" with bbox/triangle/volume chips. Wired intoautoComposeviaopts.result, threaded throughrunToVideo+ a new CLI--result <file.json>.--orbit-dir <dir>): loads a directory of rendered frames as a real spin (hero shot + a timeline PiP).renderers/title-cards.ts): kinetic word-by-word titles, brand wordmark, aurora + vignette — replaces the plain cards.media-layer.ts): JS-driven equal-and-opposite opacity with the back buffer fully staged before the swap — no double-image flash.Verified by extracting + reading ~25 stills across every shot on the real trace; final film 32s, audio+video muxed.