W39: Evidence before claims
A week in which both the blog chat and the AI briefing learned the same rule: say nothing you can't back with a source. Along the way, a cancelled order got executed anyway, and the chat classifier turned out to be routed down a path nobody had chosen.
- vt-blog — T-127: all three chat paths now exit through a single output point, and any claim that a trip is available must be backed by the active catalogue
- vt-blog — T-135: a daily probe against production using the customer-facing model, with a series counter; T-102 closed with a measured answer
- vt-blog — charter FAQ 'Where to buy a charter holiday from Riga' published (T-146, PR #130)
- biznesam.ai — fact-check: the generator now checks every claim against the full source text, in two passes, and blocks when in doubt
- biznesam.ai — Latvian archive corrected (calques, anglicisms, formal/informal address); the 25.05 briefing rewritten
- vanilla-travel — documented why return is counted only from customers acquired through ads
- One rule, two places: the chat must not promise a trip that isn't in the catalogue, and the briefing must not claim what isn't in the source. In both cases the fix was the same — code checks the evidence, not the model
- Cancelling is a separate action, not just a new message. If an order is already queued, 'cancel' without stopping it means 'do it, then undo it'
- The route matters as much as the model. Nobody chose to send customer data to China — it happened by default
- A CEO order about the charter 'since 2008' wording was cancelled but executed anyway, then reverted (M-070) — the cancellation didn't stop work already in motion
- The chat classifier was sending conversations through Chinese providers (M-087); contacts are now masked before the model, and the route is Anthropic Haiku
- A word-boundary check using ASCII \b silently missed Latvian words with diacritics (M-091)
- The Rhodes article needed around twenty manual saves in one day — editor friction is still unresolved
- The weekly recap script itself stopped halfway; this recap covers three projects, not the whole ecosystem
Ecosystem overview
Three projects with visible data, 82 commits, and one shared theme: a claim has to come with evidence. In the blog chat, code enforces it; in the AI briefing, a fact-check against the full source text does.
vt-blog
Most of the work happened here — 74 commits. At the centre was T-127: all three chat paths now exit through a single output point, so checks can no longer be bypassed through a side door. The link gate compares against the active catalogue, and a claim that a trip is available needs evidence in that same catalogue. Along the way we found that Latvian words with diacritics were silently slipping past the word-boundary check, and that link cleanup was eating the chat’s own closing line — the CEO spotted that one.
T-135 added a daily probe against production using the customer-facing model, with a series counter, and alert emails now arrive at most once a day for the same set of failures. T-102 was closed with a measured answer. On the content side, the charter FAQ (T-146) went live, and the chat classifier moved from Chinese providers to Anthropic Haiku, with contacts masked.
biznesam.ai
Six commits, almost all about quality. The briefing generator now checks every claim against the full source text, in two passes, and blocks when in doubt. In parallel, the Latvian archive was corrected — calques, anglicisms, form of address — and the LQA gate stopped penalising URLs, product names and the sources section.
vanilla-travel
Two commits. We documented why return is counted only from customers acquired through ads, and removed self-regenerating briefs from the daily digest.
Insights
One rule, two places. The chat must not promise what isn’t in the catalogue; the briefing must not claim what isn’t in the source. In both cases, asking the model to “be careful” wasn’t enough — the evidence is checked by code.
Cancelling is an action, not a message. The “since 2008” episode showed that an order already in motion gets executed unless it’s actually stopped, and then has to be reverted.
The route matters as much as the model. Customer conversations went through Chinese providers not because anyone decided so, but because nobody decided otherwise.
Mistakes and lessons
A cancelled CEO order was executed anyway and then reverted. The chat classifier sent data down a path nobody had approved. The Rhodes article needed around twenty manual saves — the editor friction we’ve been talking about for weeks is still open. And this recap’s own script stopped halfway, so only three projects are visible this week.