Skip to content

KB/operations

FinRep-AI — the two-stage AI read (AI-1 → AI-2)

Last verified

The platform’s AI is split into two stages with different jobs and different honesty contracts:

Every verdict — both variants — is persisted and graded forward. The accountability layer is the track record, shown openly on The Engine’s AI-2 Tracker, not a promise.

Honesty by construction

The design principle across both stages: a field that does not exist cannot lie, and a claim that is graded cannot hide.

AI-1 is describe-only, enforced at parse time. Three hard rules reject a read outright: the risk band it reports must echo the platform’s validated drawdown-risk band verbatim (AI-1 may not invent its own risk level); no directional field may appear anywhere in the output (direction, stance, buy/sell keys — rejected at any depth); and every prose string passes a source-attribution scrub (the AI describes data in the platform’s own vocabulary — dealer positioning, dark-pool flow, options analytics — never by upstream provider). A rejected read is persisted with a null payload so the failure itself is auditable.

The deterministic AI-2 verdict has no direction field to fill. Its risk band is a mechanical passthrough of the validated drawdown-risk composite’s band — AI-2 never re-judges it and never escalates on top of it. Its magnitude read (big / normal / small expected move, either direction) comes from a pre-registered move-size band that is still being graded — it renders with a “grading in progress” marker until the forward grade confirms it. Everything else — regime backdrop, watch-lines, likelihood framing — is a pure function of named platform surfaces. Same inputs, same verdict, every time, at zero marginal cost.

The LLM AI-2 verdict gets full latitude and a full grade. The model receives AI-1’s read and the deterministic verdict as a reference floor, and may override any of it: its own risk band, its own magnitude call, its own watch-lines and levels, trade construction in prose, the graded direction call, and an optional free-text trade idea. Exactly two things reject a render, both structural: naming a restricted upstream data source, or a malformed direction field (the shape gate exists so the experiment always produces gradeable data — the content of the reasoning is free). A rejected or unavailable render falls back to the deterministic verdict, clearly marked as a fallback — the LLM path is never on the critical path.

What the AI sees (the signal pack)

Both stages read the same signal pack, built from the same signal store that feeds the dashboard and the public API — no private feed. The pack carries:

When it runs

The two stages run on different cadences. AI-1 — the description of market state — fires on all seven scheduled slots of a trading day: 08:30, 09:40, 10:30, 12:00, 14:00, 15:30 and 16:15 ET. AI-2 — the judgment, which carries the graded direction call — fires on two of them, the 09:40 opening read and the 15:30 pre-close read. That asymmetry is deliberate: describing the tape is cheap and more of it is better, while a graded call is expensive and only worth making when there is something new to judge. On weekends and market holidays no reads fire at all — the signal store is frozen on closed sessions, so a read would only re-describe stale state; the cadence resumes at the next session’s pre-market read. On early-close half-days the shortened session gets the 09:40 opening read only — it has a real open and a real tape, but the afternoon slots would sit past the 13:00 close.

Event-driven fires add a full AI-1 → AI-2 cycle when conditions actually change, from two sources sharing one budget. The first is a tripwire flipping from armed to triggered and holding for 20 continuous minutes — a sustained condition change, never a momentary flicker; each wire fires at most once per episode with a 2-hour per-wire cooldown. The second is AI-1 escalating to AI-2: because AI-1 looks at the tape five times a day that AI-2 does not, it can flag that the standing judgment has gone stale — a regime shift, a volatility shock, a positioning break — and pull the next judgment forward. Both sources are capped together at 3 event fires per day with a 30-minute minimum gap, and that budget is tracked in the database rather than in the running process, so a restart mid-session cannot hand the day a second allowance.

Grading keeps the reads apart rather than pooling them. A 09:40 call has a whole session ahead of it, a 15:30 call has minutes, and an event call fires off a shock — three different prediction problems, so the direction grader scores each lane separately, one observation per lane per trading day. The afternoon lane is the published series (the successor to the old close-recap read); the morning and event lanes are graded the same way but held back as internal track records until they have enough history to mean anything. The risk and move-size graders still take one observation per day overall. Either way an extra intraday read is never double-counted evidence.

What the verdict contains

The served verdict object, rendered on The Tape’s Market State and AI Read cards:

The accountability layer

Four standing graders score the recorded verdicts forward, each against realized outcomes, each with an explicit maturity floor below which it reports insufficient_data rather than a confident number:

The distilled scorecards are public on GET /api/v1/ai2/history and rendered on The Engine’s AI-2 Tracker. While samples mature, the scorecard says so plainly — “too early to know if this works” is the designed output, not a failure state. A failed forward grade raises a loud falsification flag naming the kill action — the operator pulls the read from the display (graders never auto-act); the recording never stops.

Where to see it

Why two stages

  1. Describing and judging are different failure modes. A model that both reads the tape and renders the verdict can launder a hunch into a confident call. Splitting the stages means the description is auditable on its own, and the verdict layer either contains no judgment at all (deterministic) or is graded on every judgment it makes (LLM).
  2. The default read costs nothing and cannot drift. The deterministic verdict is pure code over validated surfaces — always available, byte-reproducible, immune to model regressions. The LLM variant has to earn any larger role through its side-by-side track record.
  3. The AI reads the platform’s own surface. The signal pack is the same data the dashboard renders and the public API serves — same store, same trust adjustments, same freshness flags. If the data layer is good enough for the AI’s read, it is good enough for anyone subscribing to it.