What this measures
The incumbent indices select components by liquidity. That is correct for an investment benchmark, and structurally blind to category vitality, because emerging wines are drunk young, sold on allocation, and rarely resold. The Barometer measures a different variable: the health, breadth, and momentum of wine as a living culture, across tiers. “Your numbers don't match Liv-ex” is not a valid criticism; different instrument, different job.
The rules that bind us
- Forward-only, no backfill. The index began when logging began (2026-07-13). No historical values are ever computed from a present-day constituent list: that would be index-inclusion bias, the same flaw this project exists to critique.
- Missing prices are never imputed.An unpriced wine contributes to Momentum only, and the Price Index says “undefined” rather than faking it.
- Suspicious moves go to humans. Single-period steps over 15% are flagged for editorial review, never auto-corrected, never silently filtered.
- Supply shocks are damped, and footnoted.A frost-shortened vintage looks like demand heat on availability signals; a published register of shocked vintages halves that signal's weight while they dominate the market.
- Every parameter change is a version bump. A live index is never silently re-tuned. The full changelog is below.
Disclosures, before anyone asks
- List-adoption inputs include lists curated within the founder's restaurant group.
- Trade Survey panel includes professional contacts of Wine Saint.
- Index is forward-only from published inception date; no backfilled history.
- Each signal's known failure mode is published alongside the methodology.
The live configuration, verbatim
Every constant that moves a published number. Reproducibility is the anti-pay-to-play argument.
{
"tiers": {
"defaultBlend": {
"core": 0.35,
"emerging": 0.25,
"blue_chip": 0.4
},
"nodeOverrides": {
"jura": {
"core": 0.3,
"emerging": 0.45,
"blue_chip": 0.25
},
"greece": {
"core": 0.35,
"emerging": 0.4,
"blue_chip": 0.25
},
"burgundy": {
"core": 0.35,
"emerging": 0.2,
"blue_chip": 0.45
},
"slo-coast": {
"core": 0.4,
"emerging": 0.35,
"blue_chip": 0.25
},
"canary-islands": {
"core": 0.35,
"emerging": 0.45,
"blue_chip": 0.2
},
"champagne-aube": {
"core": 0.35,
"emerging": 0.4,
"blue_chip": 0.25
},
"loire-ex-sancerre": {
"core": 0.35,
"emerging": 0.35,
"blue_chip": 0.3
}
},
"constituentsPerTier": {
"max": 10,
"min": 2,
"target": 5
}
},
"search": {
"provider": "pytrends",
"anchorTerm": "wine",
"momentumWindow": "trailing-12m vs prior-12m (YoY)",
"belowFloorFallback": "score-category-level, flag",
"volumeFloorZeroShare": 0.5
},
"survey": {
"cadence": "quarterly",
"panelTargetSize": [
15,
30
],
"diffusionFormula": "50 + (pctUp - pctDown)/2 * 100clamp",
"questionSetVersion": null,
"publishResponseRate": true
},
"$comment": "Wine Saint Barometer — methodology config DRAFT v0.9 (pre-calibration-gate). Becomes v1.0 only after the §5.5 gate: real anchor pulls + survey round 1 + SCALE/AMPLITUDE fit. Never edit a live version; bump and changelog.",
"momentum": {
"SCALE": 0.35,
"flatBand": [
47,
55
],
"AMPLITUDE": null,
"$scaleNote": "PLACEHOLDER from synthetic calibration — refit at gate against real anchor data",
"subWeights": {
"searchMomentumYoY": 0.3,
"consumptionActivity": 0.1,
"listImporterAdoption": 0.2,
"tradeSurveyDiffusion": 0.25,
"availabilityTightening": 0.15
},
"hotThreshold": 55,
"coldThreshold": 47,
"$amplitudeNote": "Decide 25 (range 25-75) vs 35 (range 15-85) at gate, once real distributions visible",
"supplyShockDampFactor": 0.5
},
"changelog": [
{
"date": "2026-07-02",
"note": "Initial draft config from methodology v2.1; awaiting calibration gate.",
"version": "0.9-draft"
}
],
"priceIndex": {
"fxMethod": "monthly-average, ECB reference rate, published",
"medianBelowN": 4,
"rebasedViews": [
"1y",
"3y",
"inception"
],
"backfillAllowed": false,
"reportingCurrency": "USD",
"minPricedTiersForRegionRollup": 2
},
"disclosures": [
"List-adoption inputs include lists curated within the founder's restaurant group.",
"Trade Survey panel includes professional contacts of Wine Saint.",
"Index is forward-only from published inception date; no backfilled history.",
"Each signal's known failure mode is published alongside the methodology."
],
"inceptionDate": null,
"vintageDiscipline": {
"route": "review-queue",
"autoCorrect": false,
"stepFlagThreshold": 0.15
},
"calibrationAnchors": {
"hot": [
"loire-ex-sancerre",
"jura",
"slo-coast",
"burgundy-value-appellations"
],
"cold": [
"bordeaux-generic",
"napa-cab-generic",
"barossa-shiraz",
"port"
],
"$comment": "Frozen LIST; values pulled fresh at gate. Targets: cold 42-47, hot 63-73, gap >= 12, quiet-hot >= 60 on blend.",
"quietHot": [
"greece",
"canary-islands",
"champagne-aube"
]
},
"methodologyVersion": "0.9-draft",
"promotionRelegation": {
"cadence": "quarterly",
"logCollection": "tierHistory",
"promoteAfterConsecutiveQuarters": 2,
"relegateAfterConsecutiveQuarters": 3
},
"pendingCalibrationGate": true
}Changelog
v0.9-draft · 2026-07-02
Initial draft config from methodology v2.1; awaiting calibration gate.