You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
π¨ The verification pipeline is measuring a biased, synthetic-heavy input funnel β Brier β real forecasting skill
We built a working resolution + scorecard pipeline (#4930: resolver live, 5 scored, brier 0.28, judged-window fixed via #5196). But the forecasts flowing into it are too narrow and too synthetic to validate whether the pipeline β or the model β is any good. You cannot judge a forecasting system's skill on this sample.
Evidence (prod, 27 unique forecasts over 21 hourly snapshots, 2026-07-12)
Domain
count
notes
market
11 (41%)
9 of 11 are state_derived synthetic backfill, not detector predictions
37% of the funnel is state_derived synthetic backfill (10/27), concentrated in market.
Only 5 domains ever produce forecasts, and 3 of them are the ones that happen to have live resolution feeds. The geopolitical + macro + energy + health surface β the core of a "world monitor" β is absent.
The scorecard scores this whole sample, so brier/voidRate/coverage are computed over synthetic-padded, 5-domain data.
Synthetic backfill to a fixed publish target.MIN/MAX_TARGET_PUBLISHED_FORECASTS = 10β14 (seed-forecasts.mjs:116-117); selectDeferredForecastForPublishBackfill (:13862) pads the detector shortfall with state_derived forecasts (:1623) β which is why market/synthetic dominates. These carry awkward auto-titles ("Maritime energy flow disruption from Black Sea maritime disruption state (market)") that also resolve poorly.
Why this is the red alert
Every downstream conclusion β "brier 0.28", "vs-market skill", "β₯80% resolvable" β is drawn from a sample that is 37% synthetic and missing the domains the product exists to forecast. We could ship a perfect resolver and still learn nothing about real skill. This blocks the meaning of #4930's KPIs even though the plumbing works.
Segregate synthetic from the skill metric. The scorecard already slices byGenerationOrigin β report legacy_detector-only Brier as the headline skill number, exclude/flag state_derived backfill so it doesn't contaminate the measured skill. (Fast, high-value.)
Curb / improve the backfill. Don't pad Brier-scored output with low-quality synthetic forecasts to hit a count target; if backfilling for UX, mark them non-scored. Fix the auto-generated titles/claims so they're crisp and resolvable (see companion question-quality issue).
Add a funnel-diversity guardrail (log/alert): if a run publishes X% state_derived, that's a signal the funnel has collapsed.
Done when
The scorecard's detector-only skill sample covers β₯6β8 domains with real geopolitical/macro/energy representation, state_derived is excluded from the headline Brier, and no run is majority-synthetic.
Related: #4930 (verification β this defines whether its KPIs mean anything), #5097 (generator integrity β the missing-signals half), #5091 (resolvable coverage), #5092 (Bet-5 track record β must not publish a synthetic-inflated Brier).
π¨ The verification pipeline is measuring a biased, synthetic-heavy input funnel β Brier β real forecasting skill
We built a working resolution + scorecard pipeline (#4930: resolver live, 5 scored, brier 0.28, judged-window fixed via #5196). But the forecasts flowing into it are too narrow and too synthetic to validate whether the pipeline β or the model β is any good. You cannot judge a forecasting system's skill on this sample.
Evidence (prod, 27 unique forecasts over 21 hourly snapshots, 2026-07-12)
state_derivedsynthetic backfill, not detector predictionsstate_derivedsynthetic backfill (10/27), concentrated in market.brier/voidRate/coverage are computed over synthetic-padded, 5-domain data.Root cause (two coupled, both generator-side)
MIN/MAX_TARGET_PUBLISHED_FORECASTS = 10β14(seed-forecasts.mjs:116-117);selectDeferredForecastForPublishBackfill(:13862) pads the detector shortfall withstate_derivedforecasts (:1623) β which is why market/synthetic dominates. These carry awkward auto-titles ("Maritime energy flow disruption from Black Sea maritime disruption state (market)") that also resolve poorly.Why this is the red alert
Every downstream conclusion β "brier 0.28", "vs-market skill", "β₯80% resolvable" β is drawn from a sample that is 37% synthetic and missing the domains the product exists to forecast. We could ship a perfect resolver and still learn nothing about real skill. This blocks the meaning of #4930's KPIs even though the plumbing works.
Required actions
byGenerationOriginβ reportlegacy_detector-only Brier as the headline skill number, exclude/flagstate_derivedbackfill so it doesn't contaminate the measured skill. (Fast, high-value.)Done when
The scorecard's detector-only skill sample covers β₯6β8 domains with real geopolitical/macro/energy representation,
state_derivedis excluded from the headline Brier, and no run is majority-synthetic.Related: #4930 (verification β this defines whether its KPIs mean anything), #5097 (generator integrity β the missing-signals half), #5091 (resolvable coverage), #5092 (Bet-5 track record β must not publish a synthetic-inflated Brier).