Build1 publisher3 min readPublished
Two gates per scene put about thirty confirmations into a fourteen-scene run
An internal tool at a video-generation service gave editors a choice between roughly thirty confirmation stops on an attended run and runAll, which skips the lot. About thirty-five PRs later, the attended path stops four times.
The Engineer · Build desk

What happened
- An editor's complaint about the internal tool for a video-generation service was the shape of using it: thirty confirmation stops on an attended run, and six hand-rolled versions of a toggle across screens.
- The only alternative was runAll, which skips straight to autopilot, so thirty stops or zero was the entire range an editor could pick from.
- PR #869 collapsed the attended path to four real checkpoints and kept the stops that gate money, part of roughly thirty-five PRs merged over a month.
- PR #871 found all 56 create-form flags rendering as equal toggles, six of which resolved to false because a parent requirement was unmet.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint Each added scene costs two more clicks of oversight, and the value of any single gate stays flat. By fourteen scenes the gate design has decided for the editor that nobody reviews anything.
- exposure When a toggle reads On and resolves false, the operator's record of what they authorised comes apart from what the paid generation did, and the UI says nothing about it.
- cost The editor pays the wall-clock cost of a review gate that hides takes already rendered and billed; the render bill for those clips is the same either way.
- decision Choosing which four stops survive is a judgement about which per-scene failures are cheap to catch late. Any pipeline whose clip failures are independent has to make that judgement again.
Scene count is the only input to the gate count. The post labels the pattern 2N+2, though the stops it lists (script, board, two per scene after the first, final) add up to 2N+1, which is 29 on a fourteen-scene run [23]. At fifteen scenes the label gives 32 [22]. Either count puts the editor near thirty clicks, and each extra scene costs two more.
That linear scaling is what made oversight bimodal. A frame gate on scene nine costs the editor exactly what the script gate costs, one more stop, and catches much less. Skipping all of them was the only other setting the tool offered [6], and how often editors chose runAll is not in the post [27].
The fix keeps four stops, and keeps the ones that gate money [7]. For four to be the right number in another pipeline, per-scene failures have to be correlated or cheap to redo. A bad board that reliably produces bad frames is covered by one gate at the board. Independent clip failures escape that: at four to six minutes a clip [21], fourteen scenes is 56 to 84 minutes of rendering [26], and batching review to the end means paying for all fourteen to find the two that are wrong.
The create form's flags are the best piece of engineering in the set. They resolve through a dependency graph, and a flag whose parent requirement is unmet resolves to false no matter what the operator set [12]. Six of them therefore read "On" and changed nothing about a paid generation, about one control in nine [25]. The client now mirrors the same transitive resolution, where before it decided the question on its own [14]. Two copies of one rule will drift. A second, independent opinion about what a flag means would drift faster and be harder to notice.
Grouping landed in PR #879: 32 of 32 settings carried a group label and none of the 56 flags did, with the component's own code comment conceding the gap before anyone fixed it [15][16].
The dashboard fix reused what was already there. groupRunRows already computed which runs were waiting on a person, oldest-wait-first, and was already called elsewhere in the app. The landing page had never called it. It sorted newest-first and showed five, so a run parked at a gate could sit below three finished runs and fall off the bottom of the strip [17][18]. PR #964 replaced the sort with two headed blocks, "Waiting for you (N)" and "Everything else" [19].
The click-through audit in PR #865 found three dead-ended paths [8]. The button offered after a run fails built its URL against a route deleted three weeks earlier, so the recovery path from a failure was itself a 404 [9]. The diagnostics page had one inbound link, gated on a benchmark-model field the create form had stopped writing. No run the app could currently start would open it [10]. The library section (Products, B-roll, Avatars, Profiles) rendered only while its own section was already active in the URL. That left four destinations invisible from anywhere else [11]. And scenes 0 through 2, rendered and billed, hid behind a loading panel whenever the focused scene had no finished take [20].
What to watch
- Whether the four-checkpoint path holds as scene counts move past fifteen, or whether gates creep back per scene.
- Whether the client-side mirror of the flag dependency graph stays in step with the server resolution as new flags land.
- Whether the "Waiting for you (N)" block changes measured time-to-click on parked runs; the post reports no before-and-after numbers.