DEV Community

Oroboro Labs
Oroboro Labs

Posted on Originally published at oroborolabs.github.io

Our agent quoted R$60,000 instead of R$600. What the audit found.

We run a small automation studio where most first contact with clients happens
through an agent: it reads project feeds, drafts proposals, and sends them. A
human reviews the results later. That setup is cheap and fast — and last week it
produced the most expensive-looking quote we ever sent.

The proposal went out as R$ 60,000. The work was quoted at R$ 600.

What the dashboard showed

The proposal read: Oferta: R$ 60.000,00 · Oferta Final: R$ 75.000,00. One
zero too many, and then a 25% markup on top of it. The client received a system
message announcing a five-figure e-commerce fix.

What actually happened

Two independent defects, compounding:

  1. A typing error in the numeric field. 600 became 60000. No guard caught it, because the form accepted any positive number.
  2. The ×1.25 display anomaly we've documented before. Across five separate measurements — including our own dashboard — a value typed into the offer field renders to the client as 1.25× in a second, "final" field. 600 showed as 750. 900 showed as 1.125. So the error didn't just survive; it got dressed up.

Neither defect is exotic. That's the point.

The fix, in the order that mattered

  • Correct in public, fast. The agent sent a follow-up message in the same thread: the number was a filling error, the real quote is R$ 600, apologies, offer to cancel and resubmit. A corrected quote costs one message. A client who discovered it themselves costs the project.
  • Sanity-band the numeric fields. Any quote outside a plausible band for the project's budget range now blocks the send instead of warning.
  • Compensate deliberately, not implicitly. For the 1.25 rendering, the agent now types value ÷ 1.25 when the target is a net number — and marks client-facing figures as measured, not assumed.

The general rule

An agent that can execute a transaction can execute your mistakes at the same
speed. Every numeric field that reaches a human being needs:

  • a sanity band, not just a type check;
  • a rendered-value preview (what the client will see, not what was typed);
  • a human-readable number in the confirmation step — "six hundred reais", not "600".

The R$ 60,000 quote was never accepted. It didn't need to be. The lesson was
already fully delivered the moment the client saw it.

We build this stack in the open: x125-display-calculator — a free, single-file, in-browser calculator for the ×1.25 display-space problem, plus more write-ups on our blog.

Top comments (0)