Standard / match
OGS Matching Model Specification
Open Gastronomy Standard — Matching v0.1
1. Overview
This specification defines how OGS models and scores pairings between dishes and beverages. The matching model is designed for explainability: every score is backed by structured explanation codes, match type sub-scores, and risk assessments.
In OGS v0.1, pairings are between one dish and one beverage.
2. Pairing Object
A pairing document links a dish to a beverage with scoring and explanation:
{
"id": "ogs:core:pairing:wagyu-barolo",
"ogs_version": "0.1.0",
"name": "Seared Wagyu with Barolo 2018",
"dish_ref": "ogs:core:dish:seared-wagyu-truffle",
"beverage_ref": "ogs:core:beverage:barolo-2018",
"match_types": [ ... ],
"overall_score": 92,
"grade": "A",
"explanation_codes": [ ... ],
"risks": [ ... ],
"confidence": 0.85,
"evidence": { ... }
}
3. Match Types
Each pairing is evaluated across one or more match types. Each match type represents a different dimension of food-and-beverage compatibility:
| Match Type | Description |
|---|---|
harmony |
Shared flavor profiles create convergence — the dish and beverage taste like they belong together |
contrast |
Complementary opposition — differences highlight and enhance each other |
bridge |
A specific aromatic compound or family links dish and beverage |
intensity_alignment |
The overall intensity/weight of dish and beverage are well-matched |
structural_balance |
Structural elements (acidity, tannin, body, fat) interact beneficially |
refresh |
The beverage cleanses or resets the palate between bites |
3.1 Match Type Entry Structure
"match_types": [
{
"type": "harmony",
"score": 88,
"description": "Shared earthy, umami-forward profiles create deep convergence",
"primary": true
},
{
"type": "structural_balance",
"score": 95,
"description": "High tannin beautifully cuts through the rich fat of wagyu",
"primary": false
}
]
| Field | Type | Required | Description |
|---|---|---|---|
type |
string | YES | Match type from controlled vocabulary |
score |
integer | YES | Sub-score for this dimension, 0–100 |
description |
string | NO | Human-readable explanation of why this match type applies |
primary |
boolean | NO | Whether this is the dominant match type for this pairing |
4. Overall Score
The overall pairing score is a composite value from 0 to 100:
- Derived from weighted combination of match type sub-scores
- Adjusted for risk factors (negative codes reduce the score)
- The weighting algorithm is implementation-defined; OGS specifies the score range and grade mapping
4.1 Score Calculation (Informative)
A reference approach (non-normative):
- Compute weighted average of match type sub-scores (weights by importance/primary flag)
- Apply risk penalties (each risk severity reduces score: low = −2, medium = −5, high = −10)
- Clamp result to 0–100
5. Grade Scale
The overall score maps to a letter grade:
| Grade | Score Range | Meaning |
|---|---|---|
| A+ | 95–100 | Exceptional — a legendary pairing |
| A | 90–94 | Excellent — highly recommended |
| B+ | 85–89 | Very good — strong pairing with minor gaps |
| B | 80–84 | Good — solid pairing, enjoyable |
| C+ | 75–79 | Above average — works but not ideal |
| C | 70–74 | Average — acceptable, some friction |
| D | 60–69 | Below average — noticeable issues |
| F | Below 60 | Poor — significant clashes or mismatches |
6. Explanation Codes
Every pairing carries an array of explanation codes — structured references to the vocabulary defined in vocab/explanation_codes.json. Explanation codes articulate why a pairing works or fails.
6.1 Explanation Code Entry
"explanation_codes": [
{
"code": "STRUCT_TANNIN_FAT",
"weight": 0.9,
"detail": "The firm tannins in Barolo are softened by the rich marbling of A5 wagyu, creating a classic synergy"
},
{
"code": "AROMA_SHARED_EARTH",
"weight": 0.7,
"detail": "Both the truffle jus and Barolo share earthy, forest-floor aromatics"
}
]
| Field | Type | Required | Description |
|---|---|---|---|
code |
string | YES | Reference to an explanation code ID from explanation_codes.json |
weight |
number | NO | Relevance weight, 0.0–1.0 (how significant this factor is) |
detail |
string | NO | Human-readable elaboration specific to this pairing |
7. Risk Model
Risks capture potential negative interactions. Each risk references a negative explanation code:
"risks": [
{
"code": "RISK_ALCOHOL_OVERPOWERS",
"severity": "low",
"description": "At 14.5% ABV, the Barolo's alcohol could slightly overpower subtle truffle nuances",
"mitigation": "Serve at 16-18°C to reduce perceived alcohol heat"
}
]
| Field | Type | Required | Description |
|---|---|---|---|
code |
string | YES | Reference to a negative explanation code ID |
severity |
string | YES | One of: low, medium, high |
description |
string | NO | Human-readable description of the risk |
mitigation |
string | NO | Suggested action to reduce the risk |
7.1 Severity Definitions
| Severity | Impact | Score Penalty (Informative) |
|---|---|---|
low |
Barely noticeable; most diners won't detect it | −2 points |
medium |
Noticeable; some diners may find it suboptimal | −5 points |
high |
Significant; likely to detract from the experience | −10 points |
8. Confidence and Evidence
Each pairing carries confidence metadata:
"confidence": 0.85,
"evidence": {
"method": "computed",
"sources": [
"OGS sensory profile analysis",
"Classical sommelier pairing principles",
"WSET food and wine pairing framework"
],
"notes": "High confidence due to well-established tannin-fat synergy principle"
}
| Field | Type | Required | Description |
|---|---|---|---|
confidence |
number | YES | Overall confidence in the pairing score, 0.0–1.0 |
evidence.method |
string | NO | One of: expert_panel, instrumental, computed, estimated |
evidence.sources |
array | NO | Array of strings describing evidence sources |
evidence.notes |
string | NO | Additional context on confidence assessment |
9. Complete Pairing Example (Informative)
{
"id": "ogs:core:pairing:wagyu-barolo",
"ogs_version": "0.1.0",
"name": "Seared Wagyu A5 with Barolo 2018",
"dish_ref": "ogs:core:dish:seared-wagyu-truffle",
"beverage_ref": "ogs:core:beverage:barolo-2018",
"match_types": [
{
"type": "harmony",
"score": 88,
"description": "Shared earthy, umami-forward profiles",
"primary": true
},
{
"type": "structural_balance",
"score": 95,
"description": "Tannin-fat synergy is textbook perfect"
},
{
"type": "intensity_alignment",
"score": 90,
"description": "Both dish and wine are bold, full-bodied"
}
],
"overall_score": 92,
"grade": "A",
"explanation_codes": [
{ "code": "STRUCT_TANNIN_FAT", "weight": 0.9 },
{ "code": "STRUCT_INTENSITY_MATCH", "weight": 0.8 },
{ "code": "AROMA_SHARED_EARTH", "weight": 0.7 },
{ "code": "HARMONY_FLAVOR_CONVERGE", "weight": 0.6 }
],
"risks": [
{
"code": "RISK_ALCOHOL_OVERPOWERS",
"severity": "low",
"mitigation": "Serve at cellar temperature (16-18°C)"
}
],
"confidence": 0.85,
"evidence": {
"method": "computed",
"sources": ["OGS sensory analysis", "Classical sommelier principles"]
}
}
10. References
- ogs-core.md — Core Specification (ID format, versioning, conformance)
- ogs-sense.md — Sensory Model (profiles used in matching logic)
- ogs-comp.md — Composition Model (dish structure informing intensity)
vocab/explanation_codes.json— Full vocabulary of explanation codes