W32: What the system said, and what the measurement showed
A week in which nearly every serious fix started with someone finally measuring something that had been taken for granted — listener counts, buffer length, a fixed slot on air, a monitoring alert.
- Radio Viens listener buffer went from 2 seconds to 66 — Icecast burst 64 KB → 2 MB, measured on air rather than calculated on paper
- First honest audience number — 9 people, not 5: Little's Law applied to server logs, after the old counter had been counting our own ffmpeg and crawlers
- Silver Fox — server-side input gates for the first client, and a rule that processing reads only active revisions; an observation can now be adjudicated, not just noted
- vt-blog monitoring no longer shouts 'content isn't live' when it simply failed to read — not knowing is no longer an alert
- vt-internal-services: the sales-ai weekly digest was switched off because the hypothesis it existed to answer has been answered (D26)
- An assumption about how a tool behaves is not a fact about how it behaves — the gap only surfaces in the output, and only if someone looks there
- One root often holds two defects: the zero offset closed both the wrong track and the missing intro
- Monitoring that can't tell 'broken' from 'don't know' produces noise, and people learn to stop looking at noise
- When output quality fluctuates, what's missing is selection, not capacity — swapping the tool is the most expensive hypothesis and should be tested last
- The 'fixed slot' on air did not exist — a daypart change does not restart the programme block; it was in the plan but not in the output
- 'Now playing' showed the wrong track, and the CEO found the defect, not the system — the root was a zero offset used at a moment when the offset isn't known yet
- The listener counter had been inflated for months because it counted our own stream readers and crawlers
- The 'Extend' step in the music method produced worse results than direct generation twice in a row — it was in the method because it looked logical
Ecosystem overview
Across five active projects the week followed one pattern: something long taken for granted finally got measured, and the number didn’t match. There were fewer listeners than the counter claimed. The buffer was shorter than it seemed. The fixed slot on air didn’t exist at all. The monitoring called itself an alert when it was really an absence of knowledge.
None of these was a failure in the usual sense — everything ran, no log screamed. That is exactly why they lasted so long.
Radio Viens
The heaviest part of the week — 61 entries. The listener buffer grew from 2 seconds to 66 by raising the Icecast burst from 64 KB to 2 MB; the number isn’t theoretical, it was measured on air. Alongside it, an HLS output with an hls.js player, because, as the CEO put it, a hole in someone’s internet is not the same as a hole on air. Silence gaps dropped from 23 to 8.
One fix closed two CEO-reported defects: “now playing” showing the wrong track, and the intro disappearing. Both shared a root — a zero offset used at the moment the offset isn’t yet known. A truthfulness gate went in alongside it, so that the defect detector is no longer the CEO.
The audience number became honest for the first time: 9 people, not 5, derived via Little’s Law from server logs — the old counter had been including our own ffmpeg readers and crawlers. On the music side, the “Extend” step was removed from the method after producing worse results than direct generation twice running, replaced by an intelligibility sieve and a short audit montage for the CEO to listen to.
Ownership was a separate thread all week: the radio’s YouTube channel sits under the Vanilla Travel work account, a GCP project turned out to live in an outside organisation, and radioviens.lv can’t receive email because it has no MX records. All of it now lives in an asset-ownership register rather than in someone’s head.
Silver Fox
For the first client, the week was about discipline at the input and traceability at the output. Sign-in became mandatory — nothing passes without a session. The client data root is now set by a single setting across all modules, not some of them. Input gates — identifier, file type, size — are checked on the server, not in the browser.
The most substantive change: processing reads only active revisions, including in outputs, and a project is created empty, with documents added rather than discovered in a folder. An observation can now be adjudicated — until now it was a note that led nowhere. The CTO and CQO findings (retrieve once, completeness, history, contradiction by field) are built in.
Vanilla Travel
On vt-blog, the monitoring that conflated two different things was fixed: a read error was being reported as “content isn’t live.” Not knowing is no longer an alert. A gate went in on the same repo so the chat assistant can’t promise “we’ll prepare an itinerary” when there’s no actual offer behind it — the honest-consultant formula. CODEOWNERS became advisory rather than blocking, because a single owner can’t approve their own work and red noise helps nobody.
vt-internal-services switched off the sales-ai weekly digest — not because it was broken, but because the hypothesis it was built to answer has been answered (D26). A tool that outlives its question is cost without benefit.
Infrastructure
The daily ecosystem digest was rewritten twice on the same CEO feedback: show movement, not an inventory of tasks. “I’m not a task administrator” — and a report that leaves the reader to work out what changed isn’t doing its job.
On biznesam.ai, the W31 experience entry was published and the W32 drafts prepared.
Mistakes and lessons
A fixed slot that wasn’t. We were confident a daypart change restarts the programme block. We never checked. Content that was supposed to air at a specific time aired whenever it landed. The fix wasn’t a more precise calculation but anchoring to a structural position — the head of the block, which is itself anchored to the clock.
The CEO found the defect. “Now playing” showed the wrong track and a person reported it, not the system. Every case like this means quality control has moved outside the system’s boundary.
A counter that counted us. The audience figure was inflated because our own stream readers and crawlers were in it. A false good number is worse than none — decisions get made on it.
An unproven step in the method. “Extend” was in there because it looked logical, not because it had earned its place. Two rounds of worse results were the price.