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 real beta interface. Waiting between generation stages is shortened.







| Check | Result | Evidence and scope |
|---|---|---|
| PR CI and Claude review | Passed | Final PR #544 commit approved with zero actionable comments; required CI checks passed. |
| 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 | Both the language-review execution and failed delivery execution exited with zero pending events, zero rejected events and no pending outcome. |
| Video delivery | Failed | artifact-confirm returned HTTP 500 because the installed streaming context returned a raw HTTP response. Fix PR #572 is merged; beta deployment and retry are pending. |
| Playback and new captions | Not verified | Blocked by video delivery failure; the earlier video in this course is not used as 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 | Blocked | The next target lookup returned HTTP 409 only 131 ms after confirmation. PR #573 adds a bounded wait. |
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. |
PR #544 and #572 are merged and deployed to beta. PR #573 fixes the reservation wait. CI and Claude review must pass before merge, deployment, and another beta retry. Production release remains separate.