Back to blog
5 min read

We audited our own engine: 7 defects, and a track record reset to zero

transparencymethodologypost-mortemsignalscalibration

There's a rule we set for ourselves when we launched GeoPulse: the truth table is public, including when it hurts. Today it hurts. After ten weeks of autonomous operation, our real accuracy was 41.9% across 341 resolved signals, and our virtual portfolio showed a five-figure loss. During a geopolitically explosive period — exactly the regime our engine was built for.

We had two options. Quietly tweak thresholds and hope things improve. Or treat our own engine the way we treat a failed signal: run an autopsy on it. We chose the autopsy. Here's what we found.

The method: a copy of the production database, and zero complacency

The audit covered the entirety of our production data: 844 signals issued, 341 resolved, 340 AI autopsies, the full history of the auto-pilot's decisions, and the server logs. Every statistical anomaly was traced back to its cause in the code. Seven defects, ranked by impact.

Defect #1: a test flag left in production

The most embarrassing one first. A test environment variable — designed to speed up simulations by dividing time horizons by four — had been sitting in the production configuration since mid-April. Concretely: every signal advertised as "7 days" only lived for 2. Every "30-day" signal was judged after 8.

The cascading consequences: magnitude targets calibrated for weeks, demanded within 48 hours — hence unreachable. 54% of our signals died with a "stagnant" status. And geopolitical bets, which need time to play out, were judged over windows of pure noise.

The fix goes beyond removing the flag: the code now structurally refuses this mode in production. A guardrail we should have installed on day one.

Defect #2: the anti-crisis guardrail couldn't see 60% of the signals

Since April, the engine has had a "regime gate": never bet on crisis (VIX up, safe-haven gold, oil spikes) when the market is calm. Good idea. Except our AI-generated signals — 60% of the volume — bypassed the filter entirely, due to an implementation detail: the filter inspected the static rule, not the bet actually being placed.

The measurable result: 95% of our resolved signals were issued with the VIX between 15 and 19 — a market shrugging at every escalation. The counterfactual is brutal: with the filter correctly applied, 86% of the directional loss would never have existed.

Defects #3 to #7: the machinery

The other five, more technical but just as costly:

  • A silent crash: a programming error killed signal generation every time an "inverted" rule fired — skipping every subsequent rule in the registry.
  • A units mix-up: 24 technical rules were reading price ticks (every 30 seconds) while believing they were reading days. Our best rules — the ones validated at 82-91% by the backtest — never issued a single signal in ten weeks. The engine was only playing its losing family.
  • An auto-calibration death spiral: a mechanism meant to tune signal "lifespans" was acting on a lever with no causal link to the metric it monitored. It tightened the same parameter 232 nights in a row, into absurdity.
  • 476 phantom positions: expired signals never closed their virtual portfolio positions, which kept drifting with the market.
  • A memory overflow in one crypto rule, crashing in a loop for weeks.

What we did with the track record

This is the part that matters to you. Those 341 resolutions were produced by an engine that judged its bets on a quarter of their horizon, never issued its best rules, and let its worst bets through unfiltered. They do not describe the engine you're using today.

So we did two things:

  1. Full retroactive correction. Every pre-fix signal was re-resolved over its real horizon (the one advertised, not the one divided by four), using the complete price history. 620 re-resolutions, 62 verdicts flipped. The honest verdict: over their true horizon, those signals were even worse — definitive proof that the problem wasn't just the stopwatch, but the "always long crisis" directional bias in a rising market. This corrected corpus now feeds our internal Bayesian calibration: the engine learns from its real mistakes.
  2. Exclusion from the public scoreboard. The truth table restarts from zero as of July 4, 2026. The old signals remain in the database, audited and reviewable, but they will never count toward the accuracy we display. A track record can't be patched up — it has to be earned back.

What changes going forward

The engine running as of today issues its validated technical rules, blocks crisis bets in complacent regimes (double lock: relative regime and an absolute VIX floor), weights the AI's confidence by its actual per-asset track record, and can no longer destroy itself through open-loop calibration.

Does this guarantee a profitable engine? No — and beware of anyone who promises you that. What it guarantees is that the numbers you'll see on our scoreboard measure what they claim to measure. See you in a few weeks, when the new counter has enough resolutions to speak. Until then, every signal, every failure and every autopsy remains public.

That's the price of trust, and we pay it gladly.

GeoPulse

Follow the markets in real time

GeoPulse correlates geopolitical events with financial markets using AI analysis of every event.

Create a free account