Sangene lærer deres ord
Sidste uge voksede stationen et skjold — en hovedet-nedad-strækning af security- og platform-plumbing. I denne uge vendte den sig udad igen, mod det oUTPOSts portal stille og roligt er blevet god til: at lave musik, og nu, at gøre den læsbar. Hvis portalen lærte at synge for et par uger siden, så lærte sangene deres ord i denne uge.
Fra en designnote til en karaoke-pipeline på en dag
Overskriften er Outskirts Music Studio-epikken (#1287), og tempoet i den er hele historien. Én morgen var det en designnote — en beslutning om at beholde en redigerbar, håndrettelig kopi af hver Suno-sangs tekst (.sunolyr) som kilden til sandhed, der skulle force-alignes senere i stedet for transskriberes-og-gættes. Samme aften var tre delsystemer shippet: en media-filmanager (#1288), en karaoke-SRT-editor (#1289) og en Whisper Auto-Timer (#1290, build #1952).
Auto-Timeren er det smarte. Den transskriberer ikke lyd og håber — den tager den tekst, du allerede ved er korrekt, og bruger Whisper til at force-aligne den til waveformen, hvor linjerækkefølgen bevares og hvert segment ankres. Det første forsøg lavede en enkelt global alignment og var, ifølge forfatterens egen note, "meget grov"; den blev genopbygget samme dag til en rækkefølge-bevarende, segment-ankret, multi-shot aligner. Kendte ord, placeret i tid, i stedet for en maskines bedste gæt på begge dele.
Editoren flytter til portalen
Ved ugens slutning havde den funktionalitet fået et ordentligt hjem. Den portal-baserede timed-lyrics-editor (#1340) lader en klient time en sangs tekst fra ende til anden via web: en in-browser waveform, IN/OUT-pills, et Ctrl-til-at-sætte-out nudge, drag-to-reorder med nabotids-interpolation og undo-til-sidst-gemte. Cues persisteres pr. sang, linje for linje, med plads reserveret til word-level timing senere. Den gamle admin-side editor er nu sat på pension — portal-versionen er den overflade, der betyder noget.
Og når en sang først har timet tekst, kan den bære den. En opt-in lyric-video-overlay sluttede sig til video-forge-pipelinen (karaoke- og "forgiving"-modes, en lyric-card-preset), koblet ind i både music-video-wizarden og dens live preview. Den hårde regel vi holdt hele vejen igennem: med tekst slået fra renderer hver eksisterende video-preset byte-for-byte præcis som før. Ny funktionalitet, nul regression på den gamle sti — pinnet af en golden-frame-test, så det forbliver sådan.
Flåden voksede to nye stemmer
oUTPOSt spawner sine agenter som CLI-subprocesser, og i denne uge sluttede to nye backends sig til rosteren: Mistral Vibe og opencode. Begge er nu bekræftet live — mistral-code dispatchede og fuldførte en rigtig smoke-test-opgave, og opencode beviste sig selv ved faktisk at udføre arbejde (den snublede, og vi fiksede, en snapshot-hang der kun sker, når en agent reelt kører). At få dem ind krævede den sædvanlige integrations-slidtur: en adapter hvis executable-slug ikke matchede dens binærnavn, et Windows cmd.exe-stdin-quirk, MCP-config-wiring og session-resume. Uglamourøst, men flåden kan nu række ud efter fire flere slags modeller, end den kunne for en uge siden.
Canvasser der overlever deres session
Visual Companion — det live HTML/JS-canvas en agent kan åbne for at vise dig et design i stedet for at beskrive det — fik en hukommelse. Durable Artifacts v2.1 (build #1718) lader dig pinne et live companion-canvas ind i et permanent artifact: én sti fra operatørens 📌-knap, én fra et companion_pin MCP-tool, browsbar på en ny /admin/artifacts-side. Både artifact og plan blev førsteklasses entiteter i relationsgrafen, så et pinnet canvas kan linkes til det arbejde, det kom fra. Planer fik også in-place-redigering (plan_update), så en indsendt plan ikke længere skal rives ned og genopbygges for at ændre en linje.
En sekundær git-backend
Stille og roligt kom en selv-hostet OneDev git-server online ved siden af GitHub — en sekundær backend for de projekter, der vil bo på homelabbet frem for på det offentlige internet, med syv projekter allerede spejlet over.
Forsvarsplanet fra sidste uge blev også ved med at rykke: Deception Plane gik live, og proxyens detektor lærte at genkende en /24-netblok-kampagne — en scanner der spreder sig over et adresseinterval — i stedet for at behandle hver probe som en urelateret hændelse.
Den ærlige fodnote
Det samme skarpe hjørne skar os for tredje gang i denne uge, og det er værd at nævne, fordi mønsteret er lærerigt. Når et real-time-kanalnavn indeholder et punktum, er to dele af vores stack uenige om, hvordan det skal oversættes: broadcasteren omskriver det første punktum til et kolon, mens browser-side-listeneren kun gør det for fire kendte namespaces. For enhver anden punktum-holdig kanal ender publisher og subscriber på forskellige navne, og live-feedet dør lydløst — ingen fejl, bare et panel der aldrig opdaterer. Vi har dokumenteret det, bygget en test-guard, og har en korrekt-navngivet søskende siddende tre linjer væk i samme fil — og en ny feature introducerede alligevel en frisk én (companion-session-feedet) i denne uge. Guarden fanger to komponenter, der kolliderer på en kanal; den kan ikke fange en enlig ny punktum-holdig kanal, som ingen andre subscriber til. Den er flagget øverst i denne uges review. Lektien vi bliver ved med at genlære: en konvention, der er nem at få forkert, vil blive ved med at blive gjort forkert, indtil den nemme sti er den korrekte.
Det var en makers uge. Stationen brugte sidste uge på at blive sikrere; i denne uge gik den tilbage til at få sangene til at synge i takt.