A macro dashboard built by a multi-agent ensemble on DuckDB
Beat rate is a first derivative. A DuckDB panel plus a three-family ensemble reads acceleration — with a falsifier on every scenario.
Every quarter, thousands of pages of releases, GAAP tables, and calls move through terminals in a few weeks. Most of that flow is consumed as three surrogates: the share of companies that beat the Street on EPS, a cap-weighted revenue print dominated by a handful of names, and a handful of management quotes.
This note is an analytics build. It is not an investment product. It does not forecast returns, and it does not tell anyone what to buy.
The engineering claim is narrower: a dashboard can treat earnings season as an instrument, not as a headline feed — if it reads the second derivative, stores primary facts, and refuses to publish a story the numbers do not support.
B_lvl is not B_acc
Two breadth measures, kept apart:
| Metric | Name | Meaning | What it actually shows |
|---|---|---|---|
| B_lvl | Breadth level | Share of index names whose revenue is up year on year | First derivative: is the book still expanding |
| B_acc | Breadth acceleration | Share whose YoY growth is above their own median of the prior eight quarters | Second derivative: is the business speeding up or slowing relative to itself |
A name can print +6% YoY and look healthy in a recap. If the same name ran at 14% for eight quarters, 6% is a stall. The asset base is heavier. Marginal return on the next unit of capital is fading. Demand impulse is spent.
When B_lvl stays high (three-quarters of names still growing) and B_acc has already fallen to the high thirties or low forties, the instrument is saying the impulse is exhausted. Margin and hiring usually follow with a lag. Official GDP prints later still. That lag is a reason to measure; it is not a trading signal on this page.
DuckDB and six demand channels
The panel does not take its truth from a secondary aggregator. Facts come from primary releases: SEC 10-Q / 10-K, 8-K operating releases, machine-readable XBRL companyconcept facts. History sits in a columnar DuckDB store — hundreds of issuers, tens of quarters, aggregations in well under a second.
Instead of averaging the whole market into one number, six channels hold independent pulses:
- AI and cloud capex (MSFT, GOOGL, AMZN, META) — XBRL capex as a read on the infrastructure cycle.
- Advertising demand (META, GOOGL) — a leading read on smaller advertisers’ mood.
- Consumer volume (WMT, COST, TGT) — same-store sales, not an inflation-padded ticket.
- Logistics (FDX, UPS) — physical parcel and freight volume.
- Bank net interest income (JPM, BAC, WFC, C) — rate-path sensitivity.
- Credit-loss provisions — a stress gauge on borrowers.
Parsers lie in boring ways. Alphabet prints the current quarter on the right and last year on the left; a left-to-right reader flips the sign of the change. FedEx reports daily thousands; UPS reports quarterly millions. Without unit normalisation the index is noise. Incomplete cohorts do not get a number: one advertiser in and one still silent is not “the advertising channel.”
A spine, and two different flags
Any instrument that claims to be a source of record has to check itself against an outside spine. After each closed season the panel’s EPS beat-rate is compared to FactSet. If the absolute gap is greater than 3.0 percentage points, aggregated indices are blocked and the data engineers get an alarm. That catch is about diluted versus basic shares, one-off adjustments, and double-counted items — not about a view on the market.
A second architectural fault: using one flag for “the season is closed and reconciled” and “this is the right edge of the chart.” If the axis only advances on complete seasons, July still shows March while 450 of 500 have already reported.
Keep them separate:
complete— season finalised and checked against the spine.axis_end— the live season, labelled with the count (481 / 500 reported).
Fusion-Review: three families, one arbiter
Tables still need a reading: what structural shift sits under a move in B_acc, where a supply chain kink appeared. A single large model, even a strong one, carries a prior. It prefers a coherent story, smooths contradictions, and misses tails.
The build uses a Mixture-of-Agents loop. A DuckDB snapshot goes, in parallel, to three panelists from different families (a Google model, a Moonshot model, an OpenAI model). Their training corpora and attention internals differ, so their errors are not copies of each other. A hallucination that all three repeat is rarer than one model’s fluent mistake.
Claude Opus, in this loop, is the arbiter — not a taste judge. It lines the three critiques up for contradiction. Every numeral in the final note is checked token-by-token against the DuckDB packet. The models are forbidden to round or to compute a delta in prose. If any family times out, the loop goes degraded and will not pretend there was a consensus.
Popper on the scenario
Journalism can end on a vibe. An engineering note ends on a kill condition.
Example of a falsifiable scenario, as a method, not as advice: a wide gap between B_lvl and B_acc is read as exhausted impulse in the consumer channel; the next season is predicted to print a lower B_lvl. Kill condition: if next quarter’s same-store sales in the consumer channel rise more than a stated threshold and B_acc stays above 50%, the stall hypothesis is thrown out and the real-income weight is revised.
A quarter later the book splits into settled (horizon closed, verdict in) and in flight (horizon still forming). That is how the core is graded. It is not a performance track record for a fund.
What the loop is for
The point of the build is operational: primary filings instead of recaps, a second derivative instead of a beat-rate headline, an ensemble that cannot invent a number, a scenario that can be killed. Analyst hours to assemble 500 filings drop from days to minutes because the store and the gates exist — not because a model “got the market right.”
A sibling problem, in a different domain, is a risk book that reports healthy while the stress job did not run. Same class of failure: a green dashboard as a claim.
- Does the panel measure acceleration against each issuer's own history, or only whether revenue is up?
- Are the facts taken from primary machine-readable filings, not from a second-hand recap?
- Is the parser checked against an independent spine, with a hard gap that blocks publish?
- Do panelists come from different model families, with an arbiter that cannot invent numbers?
- Does every scenario carry a numeric kill condition?