# Phase 3 completion report

Generated from `data/recipes/` by `tools/phase3-report.mjs`. Built 2026-08-20.

## Headline numbers

| Metric | Count |
|---|---|
| Ready dossiers reconstructed | 25 / 25 |
| Passed the automated publish gate (`READY_FOR_USER_TEST`) | 22 |
| Held back below the nutrition-match floor | 3 |
| Mean product confidence (inherited from Phase 2) | 72.8 |
| Mean recipe confidence | 66.4 |
| Mean nutrition-match score | 79.5 |
| Recipes using at least one master component | 5 |
| Recipes with an opaque proprietary-dressing component (lower confidence, disclosed) | 13 |
| Physically validated recipes (`userTests` non-empty) | 0 — **none yet, by design; see §"What Phase 3 deliberately did not do"** |

## By category

| Category | Recipes | Gate-passed | Mean confidence |
|---|---|---|---|
| salads | 22 | 19 | 66.3 |
| sandwiches-wraps | 3 | 3 | 67.7 |

## Top 5 highest-confidence reconstructions

- **CHICKEN SALAD** — recipe confidence 82, nutrition match 93%
- **ROAST POTATO SALAD** — recipe confidence 78, nutrition match 86%
- **CHICKEN MAYO BAGUETTE** — recipe confidence 77, nutrition match 83%
- **ASIAN SALMON AND QUINOA SALAD** — recipe confidence 76, nutrition match 95%
- **ONION AND TOMATO SALAD** — recipe confidence 75, nutrition match 92%

## Held back by the publish gate

- **TOMATO AND PENNE PASTA BAKED** — nutrition match 45%, blocked: nutritionMatch 45 below the 55 gate floor
- **GREEK SALAD** — nutrition match 50%, blocked: nutritionMatch 50 below the 55 gate floor
- **FATTOUSH SALAD** — nutrition match 53%, blocked: nutritionMatch 53 below the 55 gate floor

## Benchmark: Spinneys Chicken Salad

`data/recipes/spk-chicken-salad.json` — status **READY_FOR_USER_TEST**, recipe confidence 82, nutrition match 93%.

Two INDEPENDENT formulation methods agree on a chicken-forward ratio, which is itself evidence the declared nutrition panel (23g protein/100g) genuinely implies a lean, high-chicken formulation rather than a typical mayo-heavy deli salad: Phase 2's hand-built A/B/C/D sweep (data/dossiers/spk-chicken-salad.json, generic reference table, manually chosen candidate ratios) landed on 66% chicken as its best fit (model-d, sumAbsDeviation 94.9). Phase 3's engine (js/recipe-engine.js, an unrelated descending-weight search over the SAME declared ingredient order, scored against the SAME declared panel) independently landed on 62% chicken. The two methods differ by 4 percentage points (engine lower) — close agreement, not identical, which is the honest result of two different search strategies over the same evidence rather than one number copied into two places.

## What Phase 3 deliberately did not do

No bakery recipe was generated — Phase 2 found 0% ingredient-declaration evidence for bakery, so there was nothing to reconstruct FROM (see `docs/PHASE2_REPORT.md`'s weakest-evidenced-categories table). No recipe claims to have been physically cooked or tasted — `validationLabel` on every recipe says "awaiting physical validation", `userTests[]` is empty on all 25, and `js/recipe-qa.js` structurally blocks any status beyond `READY_FOR_USER_TEST` until a real `userTests[]` entry exists (spec §92: no fake testing). Sensory scores were not invented as 0-10 numbers — the `sensory` block carries the same qualitative, source-linked profile Phase 2 already built (or an explicit 'not evidenced' note), never a fabricated precise score.

## Known engine limitation

13 of 25 products declare a proprietary compound ingredient (a branded/opaque dressing or sauce) as a significant fraction of their formulation. The generic reference table represents each as a single generic composite value; most still cleared the gate (confidence lowered but nutrition match acceptable), but for 3 of them the composite's generic macros diverge from the declared panel enough that the formulation search can't fit well — the QA gate correctly holds exactly those back rather than publishing a poor fit. Decomposing a compound dressing into its own sub-ingredients (the declaration usually lists them in brackets, e.g. fattoush dressing's own [olive oil, lemon juice, garlic paste, molasses, sumac, salt, mint, sugar]) is the clear next step, not attempted in this pass.
