v2.20.0 Shipped: Three Broken Apps Repaired, Root Cause Found & Fixed
Three of the Playground's flagship apps โ Stem Separator, Face Swap, and MIDI Loop Generator โ have been quietly dead in the browser since the v2.18โv2.20 rebuild. Tonight's fix pass repaired all three and finally found the root cause.
What was broken
A bad automation pass during the v2.18 work had appended a duplicate of each page's body and script block after the closing HTML tag. The duplicate const declarations killed every app script at parse time โ pages loaded, but nothing worked.
Root cause: a bug in our own head-sync tool
The culprit was scripts/sync-head.py, the v2.18 canonical-head injector. A one-line bug passed the entire file content where a file path was expected, so the "canonical" block it injected embedded each page twice inside its own meta tags โ tripling the file and corrupting the page. The script is patched, and a site-wide scan found no other victims.
What's in v2.20.0
- All three apps repaired and verified end-to-end (Stem Separator: CUDA ready ยท Face Swap: ComfyUI online ยท MIDI Loop Gen: API online)
- Patched
sync-head.py, canonical heads applied to the repaired pages - Full headless-Chrome regression: zero JS errors across all 30+ pages
- The entire v2.18โv2.20 work finally committed to git (35+ files, ~22k lines โ no more uncommitted drift)
- Cleanup: orphaned
snes.htmlretired, dead Heos Controller stub unstaged, 3.2GB of gallery runtime data excluded from git
The site is healthy again โ and this time the fix is in version control.