W33: The failure that doesn't shout
A week in which we found three times over that something had been broken for a long while — and no log had ever complained. A security policy silently blocked a client form and its images, a preview showed a different document than the client received, and a monitoring fix became a source of alarms itself.
- vt-internal-services — 85 commits this week; the offer rebuilt into four blocks (Summary, Programme, Hotels, Everything else), a third offer type added, and consultant contacts placed at the end of the document
- The client message form had never worked — the security policy (CSP) was blocking the script; the same policy was silently blocking hotel images
- sales-ai now reads every requested hotel, not just the first one (D59), and the follow-up sequence is wired to the Pipedrive mail base (D60)
- Radio Viens — 'Language Minute' as a format: the wrong and the right sentence air side by side; spoken content no longer repeats within a 7-day window
- vt-blog — a 'Who it's for' section across 25 destination guides, plus fixes for a mobile dead end and a duplicate inspiration screen found in CEO testing
- Ecosystem digest: an incident becomes a task with an owner and a deadline within one hour, not one day
- A failure that doesn't shout outlives one that does — a security policy writes no log entry, it simply doesn't act
- Testing from the developer's context proves nothing about the user's context; this week the gap was a form that didn't exist for the client
- A preview showing a different document than the recipient gets is worse than no preview — it manufactures unearned confidence
- float("NaN") is not an error — a value can pass every check and still mean nothing
- Response time is a question of design, not diligence: the path from incident to owner shrank from a day to an hour by changing routing, not people
- The client message form in vt-internal-services offers had never worked — CSP blocked the script silently, with no error message
- Hotel images were on the page, but the same policy kept them from rendering — also silently
- The draft preview showed a different document than the one the client received
- The monitoring fix (M-058) became an alarm source itself — a 403 from our own address, and the dedupe filter lived only in memory, so one problem arrived three times
- sales-ai read only the first requested hotel — the rest vanished without a trace
- fast-gate CTR was being calculated incorrectly (T-030) — a number decisions are made on
Ecosystem overview
The week ran on one recurring discovery: things that had been broken for a long time, with no log ever complaining about them. The client message form in offers had never worked. Hotel images were on the page, but the browser never rendered them. The preview showed the consultant one document while the client received another.
None of these are failures in the classic sense. Nothing crashed, nothing shouted, the tests were green. That is exactly why they stood for so long — and exactly why a person found them, not a system.
vt-internal-services
The heaviest work of the week — 85 commits. The offer module was rebuilt into four blocks: Summary, Programme, Hotels, Everything else. Each section got its own name, because “Everything else” is not a heading to show a client. A third offer type was added along with consultant contacts at the end of the document; offers can now be edited, and the hotel name is a link. Older records get a variant snapshot on load, so history doesn’t get confused with today’s prices.
On the print side, three defects were fixed that each looked minor on its own: the PDF intro printed twice, the heading came loose from its content, and hotel cards didn’t flow, leaving the first page half empty.
The more serious find was elsewhere. The client message form had never worked — the security policy (CSP) was blocking the script, and blocking it silently, with no error. The same policy prevented hotel images from rendering. Two separate defects with one root, and both were found by a person looking at the end result rather than at the code.
On the sales-ai side, two decisions: read every requested hotel, not just the first one (D59), and wire the follow-up sequence to the Pipedrive mail base (D60). The first means hotels no longer disappear quietly; previously a client asked about five, the system read one, and nobody found out.
Client correspondence is frozen until Inga’s assessment — the tool is ready, but the person who will use it daily hasn’t had her say yet.
Radio Viens
“Language Minute” turned from a single text correction into a format: the wrong and the right sentence air side by side, so the listener hears the difference rather than just the correct version. Seven pieces were prepared for the first week, and the direction flipped along the way — it’s about things we call “them”, not people we call “it”.
Spoken content no longer repeats within a seven-day window. The important nuance: the automation produces candidates, not the broadcast — the choice stays with a person. The radio page was rewritten so the story comes before “where to listen”, and the copy no longer promises what isn’t on air.
A separate defect was fixed where “Now playing” showed “live” instead of the track name. The root was that float("NaN") is not an error — the value passed every check and still meant nothing.
vt-blog
47 commits, most of them human hands on content. A “Who it’s for” section was added to 25 destination guides (phase 2) and restructured into bullet format across 17 articles. Three articles — Greece off season, choosing a cruise, Portuguese resorts — took more than 30 manual editing rounds between them. That’s signal, not noise: a generated draft only reaches publication through a human eye.
On the technical side, a mobile dead end and a duplicate inspiration screen were fixed in the fast-gate tool (CEO finding, Aug 15), the blog logo was aligned to the main site’s 18px, and test/demo pages were pulled out of blog search with noindex.
Infrastructure
The ecosystem digest was rebuilt around one question: how fast an incident reaches its owner. An incident now becomes a task with an owner and a deadline, and an hourly sweep (--route-only) cuts the path from a day to an hour. The CEO gets a fact or a delay, not a task inventory. Alongside that, the deadline for a drop was clarified as today, not two days.
The autosave system got a gate against git conflict markers across every repository (M-058), and M-058 itself gained an uncomfortable note: the fix became an alarm source.
hotel-reviewer-agent received four fixes, all about the same thing — the corrector was repairing what wasn’t broken. Dedupe was deleting the facilities paragraph; the name corrector was renaming places. Now only known names are protected, and the hotel URL survives even when the site refuses us.
In the vt-program agent, a defect was fixed where a request for one block flushed the entire pipeline, and in vt-nerve-center the hotel source was corrected to wb_ai_hotels, not wb_hotels.
On the biznesam.ai side, the W32 experience entry was published.
Mistakes and lessons
A policy that writes no log. CSP blocked the client message form and the hotel images, and in both cases there was neither an error nor a warning. A security policy doesn’t complain — it simply doesn’t act. Which means you can’t verify it by reading logs; you have to look at what the user sees.
The development context is not the user’s context. The form worked in every check we ran. For the client it didn’t exist. The difference was in the environment, not the code, and none of our checks simulated that environment.
A preview that lies. The consultant saw one document, the client received another. The worst part isn’t the mismatch itself — it’s the confidence such a preview creates right before you hit send.
The fix became the problem. The M-058 monitoring fix started generating alarms of its own: a 403 from our own address, and a dedupe filter that lived only in memory, so one problem arrived three times. Every new watchdog is also a new source of failure.
A number decisions are made on. fast-gate CTR was calculated incorrectly (T-030). A wrong measurement costs more than none, because someone acts on it.