Lecture video: beta test evidence

Upload an English lesson, confirm its narration settings, and follow generation through delivery. Usage is sent during processing.

SP-679 · 17 Oct 2026

Status as of 17 Oct 2026

Stage
Fresh beta generation passed on 17 October. Bunny finished encoding at 100%, English captions are attached, and the instructor confirmed successful playback in Chrome.
PR
PR #544, merged at 4822512b.
Delivery fix
PR #572, streaming checksum reader. PR #573, active reservation wait.
Environment
Real beta LMS, existing Stock Market Course 1. These are live test captures, not mocked components.
Test account
Pixel Skill Developer, authorized instructor test.

Why this exists

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.

The flow

Upload

Choose the English script and slide deck.

→

Review

Confirm language and resolve timing conflicts when requested.

→

Generate

Create speech and render while usage is reported.

→

Check

Inspect the delivered video and reporting outcome.

Historical walkthrough, 15 October

Silent recording of the initial beta attempt. Waiting between generation stages is shortened. The successful fresh retest on 17 October is documented in the check table below.

How the test was run

  1. Opened Stock Market Course 1 in the real beta LMS as Pixel Skill Developer.
  2. Uploaded the authorized business-email English XLSX and PowerPoint files into a fresh job on 17 October.
  3. Checked automatic English detection, selected UK English, restored US English and confirmed.
  4. Followed speech, rendering and delivery, then checked Bunny encoding, English captions and the downloaded encoded MP4.
  5. The instructor opened the newest video in Chrome and confirmed successful playback.
  6. Ran 270 selected automated tests and the runner TypeScript type check. All passed.
17 October fresh run: the new video reached the course library with US English selected. This capture precedes the later caption attachment.
17 October fresh run: the new video reached the course library with US English selected. This capture precedes the later caption attachment.

Checks and evidence

CheckResultEvidence and scope
Runner tests and type checkPassed132 runner tests passed. TypeScript type check passed.
Backend lecture-video testsPassed113 non-database tests and 25 database tests passed. The database tests used an isolated PostgreSQL 17 instance.
Upload and automatic language detectionPassedFresh job 2DvU-mF9MqEOz8UbuuRz8 accepted the English XLSX and PPTX. AI detected English and selected US English.
Instructor overridePassedUK English was selectable. US English was restored and confirmed before speech generation.
Speech, render and deliveryPassedCloud execution lecture-video-runner-lspd4 completed with exit 0. The fresh video was delivered without a retry.
Usage acknowledgmentsPassedRunner exit reported pending=0, rejected=0 and outcomePending=false.
Bunny encodingPassedFresh video 1fa208db-9f97-40c3-bf85-a69387a91dba reached status 4 and 100%. Duration 123 seconds; 480p, 720p and 1080p available. No transcoding messages.
English captionsPassedBunny lists English captions. The generated English VTT file exists.
Encoded video integrityPassedThe fresh 480p MP4 downloaded successfully and fully decoded with FFmpeg, exit 0.
Signed embedded player requestPassedThe player returned HTTP 200 with the normal beta page Referer.
Chrome playbackPassed, manually verifiedThe instructor opened the newest 17 October video in Chrome and confirmed: It plays successfully. Browser automation could not render the embedded player.
Timing conflicts and delivery retryAutomated coverageThese inputs did not trigger a timing conflict or a delivery failure. Related branches are covered by automated tests; the fresh live run did not exercise them.

What the reporting result means

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.

Known limits

Decisions taken

DecisionChoice
Usage deliverySend each event directly in the background, one request at a time.
RecoveryKeep a local retry journal. No R2 usage backup.
ProtectionStable event IDs, execution authentication, 600 reporting requests per execution per minute and bounded storage.

Rollout

The existing fixes are deployed to beta. This verification required no new application code, PR or deployment. Production release remains separate.