Currently in alpha. Sign up free. Expect a few rough edges.
Docs

How a number is checked

Four moments: when it's defined, when it's asked for, after it's shown, and over time. Nothing here is the AI's opinion.

A number Overscore shows you is checked at four moments. The AI writes none of the checks: code does, from what actually ran. This page is the whole picture; the pages on asking, dashboards and definitions have the detail.

1. When a number is defined

A metric is the owner's words plus the parts of its calculation: which table, what's added up, the always-on filter, which date decides the month, what it's safe to split by. Code turns those parts into SQL every time it's asked. The AI never writes that SQL.

Code also decides how it adds up: a sum or count adds across stores and months; a ratio (margin as a share of sales) is the ratio of the totals; a median, an average or a distinct count is worked out at each split and never added. Nobody, agent or person, can save it otherwise. Running totals, shares of the total and numbers built from other numbers are the same machine, with the same dates, filters and splits. Any filter is read by the database before it runs. Every month of a chart is present: an empty one is 0 for a sum or a count, and left empty for a ratio, an average or a median.

Saving a metric through an agent key, even one allowed to write, leaves its definition a guess (heard). An admin or nominated confirmer can confirm by pressing Confirm on the metric (its panel or its page), or by saving while signed in, including from a laptop with ovs login then ovs push. A nominated confirmer can also choose Looks right on an answer review in Inbox. Admins choose confirmers in Settings, Company. Overscore records who and when; a name typed into the definition cannot grant approval.

A metric the assistant saves in a chat is a guess too, whoever's chat it is: being in the chat is not your yes. It says so wherever the metric's standing is said: "Defined by the AI in Kim's chat on Oct 13, not yet confirmed". You confirm it on its page, or in the chat: ask the assistant to walk you through it. It reads the metric back to you (what it is, how it is calculated, what is left out, which date it goes by) and asks whether that is right. Your yes confirms it, under your name, the way the page's button does. One metric at a time; a yes that comes with a change confirms nothing until the changed calculation has been read back to you.

2. When a number is asked for

In a chat (all but the dashboard builder's, whose answers describe a page), every figure in the answer is matched against the query results before you see it, and a line is written under it: trusted (a confirmed metric's own calculation), worked out by hand (the AI's own query; the tables it read are named), or not found. A figure that matches nothing is sent back once to be redone. Signs count: a loss does not match a gain of the same size. A number that is part of a name, such as account 2200 Customer deposits or 1200 Main Street, is read as the name, not as a figure. So is that number said on its own when the results only write it as part of a name, as when a failed sync's log says "401 Client Error" and the answer calls it a 401. A sum, difference or share worked out from results gets its own worked out label with the numbers used; it does not inherit a metric's confirmation. Trusted requires a confirmed definition and the person Overscore recorded as confirming it. Merely supplying a name and date never earns that label.

If figures still do not match after the final check, a separate Number check notice appears below the chat answer, naming what needs checking before you use it. This notice is written by Overscore from the check results and stays separate from the answer's sentences.

A row count describes the table behind an answer; it does not earn the metric's label. For example, 129 daily summary rows may hold 981 orders. The assistant is given the table's description of one row, and an orders or invoices count is asked as its own measure. Percentages keep their units: a returned margin of 66.7% cannot support a claim of $66.70.

On a dashboard, every number is asked from the server with a receipt; the page is never allowed to add, divide or average rows itself, and the save is refused if it tries. "Up 6% vs last year" comes from the server with its own dates and SQL.

A dashboard's number, an alert's and an email's are worked out once and kept until the data under them changes, so the same question gives everyone the same answer, at most five minutes behind data that lands all day and current the moment a model is rebuilt. Its receipt is the one from when it was worked out, and says when that was; the line under a dashboard says it for the page. Run it again on a trace works it out fresh.

3. After a number is shown

For a chat answer, the human version: Ask someone to check. A teammate who has never signed in here or whose current access cannot be verified can still receive the invitation; sending is refused when Overscore knows they lack the required access. Opening and answering always require current access to every original table, without masking, including the tables behind its metrics. They see exactly what it rested on (the metrics and versions, the SQL, the tables, the notes) and say looks right, right with a nuance, or wrong and why. A person marked as able to confirm makes the metric's definition confirmed with their "looks right".

4. Over time

  • Every night every metric whose data has changed since it was last measured is run again, and its finished months measured again. A month that changes after it has ended (rows landed late, a model changed, a sync dropped rows) goes on that metric's one row in the Inbox, addressed to its owner, with what the month was and what it is now. A change smaller than half a percent of the month's figure is accepted without asking and listed under Handled for you.
  • Every night each page someone viewed that day is checked again against what the server sends now, so a figure that went stale is caught before the next viewer.
  • A dashboard's number, a chat's table or chart, and an analysis's table keep their receipt (definition, version, period, filter, split, SQL) and have a trace: the amount first sent, its dates and split, its calculation and the moment its query ran, and the tables and their status. Run it again uses that same moment and shows any change beside the amount first sent.
  • When a metric is defined after a page or an answer already computed it, they're linked to it, with no rewrite. When it's close but not the same, an admin gets one card: Use the metric switches the page to the metric, and Keep the page's number keeps the page's own calculation for now; Define them, on the dashboard's Where the numbers come from tab, defines the page's calculation as a metric of its own.

What you'll actually see

The line under a figure. A dot on a card. Cards in the Inbox. The trace behind any number. If any of those feel noisy, that is what to tune; the checks underneath stay strict.

What to say to it

Where does this number come from?
How is gross margin calculated?
Ask Nina to check this.
Why is June different from what it was last month?

All docs · Something wrong on this page? Tell us.