Metadata-Version: 2.4
Name: mapfarm-cuisine
Version: 0.11.0
Summary: Ontologie culinaire IAOS — schémas corpus + gates déterministes (génération gouvernée de recettes/menus).
Author: Holding MAPFARM
License: Proprietary
Keywords: culinaire,gates,gouvernance,mapfarm,menus,ontologie
Requires-Python: >=3.12
Requires-Dist: pydantic>=2.6
Requires-Dist: pyyaml>=6.0
Provides-Extra: test
Requires-Dist: pytest>=8; extra == 'test'
Description-Content-Type: text/markdown

# mapfarm-cuisine — compositeur de menus gouverné

**Vitrine publique : [cuisine.iaos.cc](https://cuisine.iaos.cc)** · présentation :
[/presentation](https://cuisine.iaos.cc/presentation)

Génération **gouvernée** de menus : le LLM n'invente jamais — il sélectionne et narre.
Les menus sont **assemblés** depuis des recettes `validated`, admis par des **gates
déterministes** (allergènes INCO, sécurité sanitaire, régimes, coût, saison), validés
par un humain (porte HITL), puis **figés** avec fiche technique de production —
chaque ligne tracée `id@version` (journal EVIDENCED_BY).

## Les trois briques

| Brique | Rôle | Où |
|---|---|---|
| `cuisine/` | **Socle pur** (package PyPI `mapfarm-cuisine`) : schémas, 5 gates recette + 5 gates menu, moteur `compose_menu` (déterministe, swap gouverné, classement diversifié), fiche technique, orchestration `composer` (LLM injecté), corpus embarqué | PyPI Gitea |
| `service/` | **cuisine-composer** — reçoit les dispatchs du kernel iaos (agent `menu_composer` en `service_url`, §3.3) | VM103:8017 (interne) |
| `panel/` | **Vitrine prospect** — proxy vers le run API du kernel (clé scopée, gardes anti-abus) | VM103:8018 → cuisine.iaos.cc |

## Corpus (source de vérité)

205 documents seed (`corpus/*.yaml`) : 12 cuisines (Bourgogne, France, Italie, Levant,
Inde, Thaïlande, Mexique, Espagne, Maghreb, Grèce, Japon, Vietnam), bases/sauces mères
en sous-recettes (D4), 12 classiques **Escoffier** structurés (Guide culinaire 1903,
domaine public, Gutenberg 71395), substituts validés (swap gouverné), accords à
**évidence moléculaire** (socle taste, D8 : gingembre∩ail = 33 composés partagés).

**Ligne rouge** : aucune température sanitaire inventée. Les protéines animales cuites
passent par une technique dont la température à cœur **n'est pas sourcée** → G3 les
**bloque** jusqu'à la passe chef (`docs/D2-SESSION-CHEF.md`).

## Commandes

```bash
pip install -r requirements.txt
python -m cuisine.validate corpus/        # schéma + règles d'état sur les 205 docs
python -m cuisine.menu corpus/            # composer des menus (CLI, déterministe)
python -m cuisine.taste_bridge corpus/    # enrichir l'évidence moléculaire (API taste)
python -m cuisine.edges corpus/ --impact <id>   # impact de dépréciation
pytest && ruff check .                    # py312, line-length 100
```

## Déploiement (VM103, `/opt/cuisine`)

```bash
docker compose -f docker-compose.prod.yml up -d --build   # api (8017) + panel (8018)
```

Secrets : `.env` (IAOS_DISPATCH_KEY, LITELLM_URL) et `panel.env` (IAOS_PANEL_KEY,
DEMO_CODE?) — voir `service/.env.example` et `panel/.env.example`. Jamais committés.
Publication du package : `python -m build` puis twine vers
`https://git.it.iaos.cc/api/packages/mapfarm/pypi`.

## Documents

- `docs/CDC-ontologie-culinaire-v0.2.md` — décisions D1–D10 (ontologie, gates).
- `docs/CDC-compositeur-culinaire-v0.2.md` — décisions C1–C11 (compositeur).
- `docs/D2-SESSION-CHEF.md` — checklist chef : sourcer les températures → débloquer.
