← All posts

The bug that taught us to snapshot the truth

This one's for the engineers. Early on we had a subtle bug in how drafts remembered the company a prospect worked for, and fixing it changed how we think about every piece of generated content in the system.

The setup

When OnlyLeads drafts a message, it's drafting about something: this person, at this company, given this signal. The draft is a point-in-time artefact. The message you approve on Tuesday was written from what we knew on Tuesday.

Our mistake was treating the company link as a live reference rather than a snapshot. A draft pointed at "the contact's current company" instead of recording "the company this draft was written about." Most of the time those are identical, so the bug was invisible, right up until enrichment updated a contact's employer, or a record got re-processed, and a draft would silently start referring to the wrong place.

A generated message is a statement about a moment. If the facts can move underneath it, the message can quietly become a lie.

The fix

We made the draft carry its own copy of the facts it was written from. The company is stamped onto the draft at generation time, propagated through every step that creates one, and backfilled across the rows that predated the fix. The draft now means what it said when it was written, no matter what changes later.

The principle

Anything an LLM generates should be reproducible from a frozen set of inputs. If you can't point at exactly what a piece of content was generated from, you can't trust it, you can't audit it, and you definitely can't put your name on it in a review queue. "Snapshot the truth at generation time" is now a rule we apply to every generator in the codebase, not just drafts.

It's the kind of bug you only catch because a human reads every message before it sends. Which brings us back to the review queue, again.

Outreach that respects both sides of the conversation

Deterministic pipeline, LLM drafting where it earns its keep, a human on every message. No agent loops. No credit burn.

Get started →

More from the blog

Campaigns, sequences, and a sorting hat, without going on autopilot · 6 June 2026 Never pitch your product to a competitor's employee · 27 May 2026