UNDERTOWCHANGELOG / FIELD NOTESWhat it is now ↗

HOW THE FUCK IT GOT HERE

Day by day,
the station changes its mind.

What changed and why—written as prose rather than commit messages. Including the days Undertow talked itself out of something.

The WTF guide explains what Undertow is now. This is the selective public record of what surprised us and what we still do not know.

The station stopped losing its mind. Probably.

Fresh visitors had sometimes found an empty programme, or waited twelve to twenty seconds for an answer while the health check insisted the station was alive. We found two concrete HTTP defects. A fairness-session database lookup was blocking the async server, and a successful response whose JSON body broke in transit could replace the last accepted programme with an empty object. Both are fixed.

Then we watched sixty consecutive observations: 240 successful HTTP requests across thirteen records, with no recurrence. That is reassuring, but it is not a root-cause story for the earlier long stalls. Worker-pool and database contention remain plausible limits. The honest result is narrower: two real bugs are gone; the station behaved for half an hour; permanent reliability has not been proved.

The DJ developed an unfortunate theory of tropes.

We asked the DJ to understand why a particular musical lineage works rather than memorising Adrian's vocabulary. It correctly identified repetition, delay and decay as mechanisms, then helpfully treated the actual sonic materials as disposable genre tropes. The result could preserve an abstract causal diagram while abandoning the world that made the diagram meaningful: generic modern bass music wearing the explanation of something more specific.

This was useful. We had taught the system to preserve mechanisms while accidentally giving it permission to discard what the mechanism was made of. The current rule keeps material grammar and causal mechanism together when the source world matters, and the failed theory remains in the evidence. We still do not know whether that correction produces better music. Adrian heard the prepared comparison and answered “neither / neither”, so the research is shelved until a more capable local music model exists.

We moved the projector because the screen was blocking it.

The first liquid-wheel projector technically worked and looked wrong: a cone and wall decal read as an effect pasted onto the room. Adrian rejected it and gave a physical correction—one source on the north side, firing south through smoky space toward the desk. Rebuilding it as a depth-clipped, source-shadowed volume made it feel like light occupying the club rather than a texture on a wall. His verdict was “10000x better. nice direction.”

The surprise was architectural. The hard part was not drawing psychedelic colour; it was respecting where the machine, beam, smoke, walls and bodies could actually be. The browser checks establish graceful failure and stable rendering, not how the room feels on a physical phone or whether this is the final light.

The website became nearly a VR nightclub.

The listener began as a quiet radio page with machinery behind disclosures. That was legible, but it kept turning the station into a website decorated as a booth. We replaced the metaphor with a place: two turntables, mixer, recording deck, physical tapes, crates, distant walls, a dance floor, spatial sound and a body that can walk around. Records now carry their calls and provenance with them instead of opening an unrelated admin surface.

Building the room repeatedly exposed the difference between geometry and presence. A mathematically valid dancer was too tall. A visible DJ arm looked cheap. A speaker click behaved like a transport control instead of a speaker. The compass was backwards. Mobile movement used a bespoke D-pad where a thumb stick should have been. Each defect passed some earlier test; none survived looking at the room as a room.

It is now close enough to a game environment that WebXR is a sensible next step. That does not mean the room is finished, comfortable on real hardware, or artistically accepted. “What the fuck, this is in a browser?” remains the target, not a checkbox we can award ourselves.

The station wrote down its laws.

By now Undertow had accumulated enough corrections to become difficult to explain without lying by omission. The public guide became a two-depth field atlas: an ordinary answer to “what is this?” above a source-checked account of authority, retention, spending and failure boundaries. The deployment path acquired a shared release lock. Backups had to prove an actual restore. Artwork spending got its own ledger. A recording's public eligibility could change without changing its retained identity. These were no longer implementation details. They were laws of the instrument.

The surprise was how often a rule began as a correction to confident prose. A diagram could describe source without proving deployment. A green test could prove geometry without proving a room felt right. “Anonymous” analytics could still create third-party identifiers. Writing the laws down did not make the system finished; it made contradictions visible enough to stop obeying both sides. We still do not know which of today's laws are permanent and which are merely the best account of the instrument we have so far.

Records stopped being output files.

The archive became a room full of objects. A recording acquired a sleeve, printed notes, a position in a crate, a turntable and a tape path. Its call and provenance moved with it instead of opening as unrelated audit furniture. The mixer gained real meters; the monitors became acoustic objects; the DJ viewpoint acquired knees, hips and shoulders. Several versions were physically absurd—the DJ waddled, an arm appeared under the mixer, artwork sat on vinyl as a rectangular plaque—but each failure clarified what it meant for the interface to be a place rather than a page.

The same day, provider refusals and other generation failures were separated from valid retained music. A refusal belonged to one request, not to the whole station; a failed generation path could not withdraw an existing valid recording. This joined two ideas that had looked unrelated: physical objects persist, and failures need somewhere to live without erasing them. We had not yet built the convincing club, but the raw material had stopped being disposable output.

Bring Back stopped meaning “generate it again.”

Early caller memory was shared too loosely. A new call could inherit another person's history, and “bring this back” risked collapsing replay, regeneration, retry and musical return into one vague action. We isolated caller memory and made return explicit: replay hears existing bytes; a retry repeats a failed operation; Bring Back is a new parent-linked call with fresh authority to transform an earlier record. None of those meanings may be inferred merely because two requests look related.

This gave the audience less accidental power and the DJ less room to invent a relationship after the fact. It also exposed how much identity a supposedly simple button carries: who asked, which record they meant, what may be preserved, what may change, and whether another paid attempt exists. The boundaries became sharper, but their musical adequacy did not. A correctly linked return can still be a bad return, and only listening can establish that.

We hid the machinery and accidentally hid the truth.

The first attempt to quiet the interface removed prompt and trace controls from the operator's listening room. That made it cleaner and made the instrument impossible to inspect. Adrian's correction was precise: terrible hierarchy did not mean the evidence was unwanted. The complete call, DJ interpretation, exact provider request, returned blocks, decisions and human notes came back beside each recording. The public listener simultaneously became a calmer paper-and-ink transmission desk, with deeper machinery deferred rather than deleted.

That distinction—progressive disclosure, never evidentiary disappearance—became one of Undertow's foundational laws. It also changed the project's posture. We stopped treating an interface as successful because fewer controls were visible, and stopped treating retained JSON somewhere on disk as human memory. The remaining problem is permanent: evidence can be technically reachable and still be stupid to navigate. Every later room has had to solve both truths at once.

One generation. Human taste.

The first station architecture generated several candidates and let models score them KEEP or NO. It looked like diligence. In practice it created a bottleneck: Adrian could not naturally find and hear everything his own instrument had made, and machine praise often rewarded polished violations of the caller's idea.

So Undertow talked itself out of candidate farming. One caller interpretation now authorises at most one paid generation. Every valid returned recording remains playable regardless of machine status. Automated listening may describe audio, defects and adherence, but it cannot decide whether a record is good. Failed art stays in the archive because it is evidence, not waste.

This made the system less theatrically intelligent and more honest. It did not solve taste. The unresolved work is the whole interesting problem: whether a resident DJ can develop a recognisable hand across very different musical worlds without becoming a house genre, a compliance engine or an imitation machine.