2026-09-26 — Full control
A morning review that turned into the day SCORPIO PLAYER 2027 got its playback plan.
Housekeeping first
The review was mechanical and clean: 21 tasks landed in two days, every engine repo, console
repo and dist exports.json checked independently of what the reports claimed. They all held.
Then the cleanup the orchestrator never does: 5 sessions killed, 37 worktrees and 62 local
branches removed, about 7 GB back. One worktree still had a plan file that wasn't in git, so it
got committed before its checkout went. And the one branch git refused to delete as "unmerged"
turned out to carry a report already sitting byte-identical in done/.
One broken spawn explained itself on inspection: a 20 KB worktree with hooks and no checkout.
The session had been sitting on a blank screen for nine hours. A pane can only ever prove a
session is alive; it never proves a session is working.
Lane rules shouldn't die on a toggle
The opus lane grabbed a Scorpio Player task this morning because its rule text had quietly
become "manual via tui". Someone had turned the lane off and on again, and the TUI's Enter key
writes that placeholder. Turning a flag off deletes the file, and the rule went with it.
The fix: turning a flag on with no text now reuses the last real text from git history, then
falls back to a per-flag default. The flags already live in git, so their history was always
there. The TUI just wasn't reading it.
The engine decisions
Three conversations settled what the tracker had left open for days:
- Windows / Xbox: our FFmpegInteropX fork (
master-sp, 54 commits of our own subtitle, HDR and
remux tweaks) gets rewritten in C. Layers: C engine → WinRT component → WinUI3/UWP. Plain C
can't produce a MediaStreamSource, so the WinRT layer does that job and nothing else.
- Our own FFmpeg, latest release, built for every target. Not a NuGet package.
- iOS / Android: full control, own engine. The C core owns the clock, sync, tracks, seek,
subtitles and software fallback. VideoToolbox and MediaCodec only decode and display. That's
the Infuse approach: we own everything we might need to fix, and still get PiP and Dolby Vision.
A two-year-old bug, fixed in two lines
The template-parse differential had flagged two live settings templates that no legacy client
could load. The cause turned out to be two filenames missing from two handler lists in
runtimeconfig. Nobody had noticed because the old code swallowed the error and showed an empty
page. The fix was two lines; publishing took three runs, because the documented command was
itself wrong. Checked against the live bundle: 301 entries, exactly two changed, every template
now parses.
A differential test earns its keep on bugs like this. It compares against what the old code
actually did, not what we assume it did.