Upload an English lesson, confirm its narration settings, and follow generation through delivery. Usage is sent during processing.
English lessons need the correct narration language. Instructors can resolve language and timing choices before generation continues. Usage is recorded across failed and successful executions. The runner now sends each usage event in the background and retries from a local journal.
Choose the English script and slide deck.
Confirm language and resolve timing conflicts when requested.
Create speech and render while usage is reported.
Inspect the delivered video and reporting outcome.
Silent recording of the initial beta attempt. Waiting between generation stages is shortened. Later fixes and successful recovery are documented in the screenshots and check table below.








| Check | Result | Evidence and scope |
|---|---|---|
| PR CI and Claude review | Passed | PRs #544, #572 and #573 passed required CI and received Claude approval with zero actionable comments. |
| Post-merge database suite | Passed | 2,448 tests passed before the beta deployment. |
| Runner and frontend tests | Passed | 132 runner tests and 759 frontend tests passed locally; TypeScript and frontend build passed. |
| Beta upload and automatic detection | Passed | The backend accepted both files and returned detected language en and locale en-US. |
| Instructor override | Passed | The UK English option was selectable. US English was restored and persisted on confirmation. |
| Speech and render | Passed | The job reached delivery after rendering. The selected voice remained en-US-Chirp3-HD-Aoede. |
| Usage acknowledgments | Passed | First execution window: 36 usage requests, all HTTP 204. Second execution: 30 usage requests, all HTTP 204. Each runner exit reported zero pending and rejected events. Request counts are not unique-event counts. |
| Video delivery | Passed after fixes | The first attempt failed the checksum reader. PR #572 fixed it. The next attempt exposed the reservation race, fixed in #573. The saved job then delivered successfully. |
| Playback and new captions | Not verified | Delivery succeeded, but playback remains unverified because the embedded player stayed blank and browser automation reported a paused document. Captions remain pending. The older course video is not proof. |
| Timing-conflict review | Not exercised | These files did not trigger a timing conflict. Automated timing coverage remains separate. |
| Checksum fix beta retry | Passed | Artifact confirmation returned HTTP 204 after PR #572 deployed. |
| Video reservation | Fixed; unit tested | PR #573 is deployed. Tests cover waiting and reuse of the original GUID. The live recovery reused the completed reservation; a new reservation was not exercised. |
| Saved delivery recovery | Passed | Execution lecture-video-runner-26876 completed successfully in 20.36 seconds. No audio or video was regenerated. Usage exit pending=0, rejected=0, outcomePending=false. |
Each provider call creates a stable event ID. The backend accepts identical repeats without adding cost again. A final pending count of zero means the runner received acknowledgments for its queued events. It does not independently prove that provider invoices match the database ledger.
| Decision | Choice |
|---|---|
| Usage delivery | Send each event directly in the background, one request at a time. |
| Recovery | Keep a local retry journal. No R2 usage backup. |
| Protection | Stable event IDs, execution authentication, 600 reporting requests per execution per minute and bounded storage. |
Beta deployment of 14c5a2ae succeeded after 2,448 database tests passed. The saved delivery recovered in 20 seconds without regenerating speech or video. Production release remains separate.