# Challenge IA — Reality Trial 001 / GardenScript 0.2

## Ta mission

Ecris une strategie complete pour `Reality Trial 001`, une confrontation
prospective sur de vrais plants de tomate. Trois IA recevront exactement ce
meme challenge. Chaque strategie pilotera trois plants distincts pendant 21
jours. Les sources seront validees et scellees avant la premiere observation
du pilote.

Ta reponse finale doit contenir uniquement le code source GardenScript :

- aucun bloc Markdown ni triple backtick ;
- aucune introduction, analyse, explication ou conclusion ;
- aucun commentaire et aucune ligne vide ;
- une seule strategie commencant au premier caractere par `garden` ;
- fins de ligne LF ;
- nom de strategie original en ASCII, sans guillemet interne.

Raisonne et verifie silencieusement ta strategie avant de repondre.

## Le pilote reel

- espece : tomate (`Solanum lycopersicum`) ;
- horizon : 21 jours ;
- 9 plants comparables, repartis en 3 blocs randomises ;
- 3 repetitions par strategie ;
- memes pots, substrat, exposition et materiel ;
- une evaluation du programme par plant et par matin ;
- aucune observation future n'est communiquee au moment de la soumission.

Il s'agit d'un pilote exploratoire, pas d'une preuve agronomique ni d'un
conseil de culture. Plusieurs capteurs sont des proxies non destructifs publies
avec leurs donnees brutes. L'operateur peut refuser une action dangereuse et
soignera toujours un plant en urgence, meme si cela rend la strategie non
classable.

## Budgets par plant

| Ressource | Budget |
|---|---:|
| Irrigation pilotee totale | `90 mm` |
| Irrigation pilotee quotidienne | `12 mm` maximum |
| Travail virtuel | `240 min` |

La pluie naturelle ne consomme pas le budget d'irrigation. Chaque repetition
possede son propre registre : deux plants de la meme strategie peuvent donc
prendre des decisions differentes si leurs observations different.

## Classement preregistre

Le classement agrege les trois repetitions et reste strictement
lexicographique, sans score composite :

1. strategie classable en priorite ;
2. moins de plant-jours critiques ;
3. moins de plants perdus ;
4. plus grande masse totale de fruits commercialisables ;
5. plus grande masse totale de fruits recoltes ;
6. pression maladie quotidienne moyenne plus basse ;
7. stress hydrique quotidien moyen plus bas ;
8. moins d'irrigation pilotee ;
9. moins de travail virtuel accepte ;
10. identifiant de slot comme departage final.

Un plant-jour est critique si le stress hydrique, le stress thermique ou la
maladie atteint 85 %, ou si une intervention d'urgence est necessaire. La
sante et l'integrite des plants passent avant la recolte et l'economie de
ressources.

## En-tete et setup obligatoires

Les quatre premieres lignes ont cette structure exacte :

    garden "Nom original ASCII" version 0.2
    domain plant
    ruleset: tomato.v2
    setup:

La cinquieme ligne choisit exactement un paillage :

    mulch = none

ou :

    mulch = straw_light

ou :

    mulch = straw_heavy

Mapping reel au jour 0 :

- `none` : aucun paillage ;
- `straw_light` : 2 cm de paille propre ;
- `straw_heavy` : 5 cm de la meme paille.

## Grammaire fermee

Une branche respecte exactement cette forme :

    when SENSOR OP LITTERAL [and SENSOR OP LITTERAL ...] => ACTION

Dans la source reelle, `when`, `otherwise` et `mulch` sont precedes de deux
espaces.

- source UTF-8 de 16 Kio maximum ;
- cinq canaux obligatoires, uniques et dans l'ordre impose ;
- 1 a 10 branches `when` par canal ;
- 1 a 8 predicats relies par `and` par branche ;
- exactement un `otherwise` final par canal ;
- la premiere branche vraie gagne ;
- operateurs : `<`, `<=`, `>`, `>=`, `==` ;
- aucun `or` : utilise plusieurs branches successives ;
- nombres finis avec au plus trois decimales et unite obligatoire ;
- budget statique `branches + predicats + 5`, maximum 512 ;
- aucune boucle, recursion, fonction, variable mutable, memoire ecrite,
  importation, fichier, reseau, processus, alea ou horloge systeme.

## Les cinq canaux, dans l'ordre exact

### 1. Irrigation

    decide irrigation:

Action : une dose de `0mm` a `50mm`. Le noyau reel plafonne ensuite la dose a
12 mm/jour et au budget restant. Le volume applique vaut dose en mm multipliee
par la surface superieure du pot en metres carres, en litres.

### 2. Ombrage

    decide shade:

Actions :

- `off` — aucun filet, 0 min ;
- `net_30` — filet environ 30 % de 11:00 a 17:00, 4 min ;
- `net_50` — filet environ 50 % sur la meme fenetre, 8 min.

### 3. Protection

    decide protection:

Actions non chimiques propres a ce pilote :

- `none` — aucune action, 0 min ;
- `bio_low` — inspection et retrait des debris vegetaux deja detaches, 10 min ;
- `bio_high` — action precedente puis retrait d'au plus une feuille au moins
  75 % symptomatique, si elle existe, 18 min.

### 4. Nutrition

    decide nutrition:

Actions :

- `none` — aucun apport, 0 min ;
- `compost_low` — 1 g de compost mur par litre de substrat, 15 min ;
- `compost_high` — 2 g du meme compost par litre de substrat, 25 min.

Les deux actions de compost partagent un delai de securite de sept jours par
plant. Une demande trop precoce est refusee sans consommer le budget.

### 5. Canopee

    decide canopy:

Actions :

- `keep` — aucune taille, 0 min ;
- `prune_light` — retrait d'au plus une feuille basse eligible, 25 min.

`prune_light` a un delai de securite de sept jours. Il est refuse si aucune
feuille n'est eligible ou si moins de six feuilles saines resteraient.

## Les 18 capteurs exacts

Tu ne peux utiliser que les capteurs suivants. Le litteral compare doit porter
exactement l'unite indiquee.

| Capteur | Unite | Bornes du compilateur | Sens dans le pilote |
|---|---:|---:|---|
| `clock.day` | `day` | 1–366 | jour courant, 1 a 21 |
| `soil.water_pct` | `%` | 0–100 | mediane calibree de deux lectures du substrat |
| `forecast.rain_mm` | `mm` | 0–500 | pluie prevue sur 24 h dans le bulletin commun du matin |
| `forecast.temp_max_c` | `C` | -60–70 | maximum prevu pour le jour dans ce bulletin |
| `forecast.humidity_pct` | `%` | 0–100 | humidite maximale prevue pour le jour |
| `plant.water_stress_pct` | `%` | 0–100 | score visuel preregistre de perte de turgescence |
| `plant.heat_stress_pct` | `%` | 0–100 | score visuel d'enroulement, fletrissement chaud et brulure |
| `plant.disease_pct` | `%` | 0–100 | surface foliaire visible symptomatique estimee |
| `plant.ready_pct` | `%` | 0–100 | part des fruits visibles au stade de recolte preregistre |
| `resource.water_left_mm` | `mm` | 0–500 | budget d'irrigation restant pour ce plant |
| `soil.water_mm` | `mm` | 0–500 | eau derivee du pourcentage et de la capacite gelee du pot |
| `plant.biomass_g_m2` | `g_m2` | 0–20 000 | proxy d'imagerie, normalise a `500g_m2` au jour 0 |
| `plant.leaf_area_index` | `lai` | 0–12 | surface verte projetee / surface superieure du pot |
| `history.rain_3d_mm` | `mm` | 0–1 500 | pluie mesuree des trois jours termines |
| `history.irrigation_3d_mm` | `mm` | 0–500 | irrigation acceptee des trois jours termines |
| `history.dry_streak_day` | `day` | 0–366 | jours termines consecutifs avec pluie inferieure a 1 mm |
| `history.days_since_irrigation_day` | `day` | 0–366 | jours depuis le dernier apport accepte ; zero avant le premier |
| `resource.labor_left_min` | `min` | 0–2 000 | travail virtuel restant pour ce plant |

Les historiques valent zero au premier jour et sont recalcules uniquement a
partir du journal accepte. Les capteurs `forecast.*` sont communs aux neuf
plants ; les capteurs de sol, de plante, d'historique et de ressources sont
propres a chaque plant.

## Exemple de structure valide

Cet exemple montre la grammaire, pas une strategie conseillee :

    garden "Example Only" version 0.2
    domain plant
    ruleset: tomato.v2
    setup:
      mulch = straw_light
    decide irrigation:
      when soil.water_pct < 40% and forecast.rain_mm < 3mm and resource.water_left_mm >= 8mm => 8mm
      otherwise => 0mm
    decide shade:
      when forecast.temp_max_c >= 35C and resource.labor_left_min >= 8min => net_50
      otherwise => off
    decide protection:
      when plant.disease_pct >= 50% and resource.labor_left_min >= 18min => bio_high
      otherwise => none
    decide nutrition:
      when clock.day <= 7day and resource.labor_left_min >= 25min => compost_high
      otherwise => none
    decide canopy:
      when plant.leaf_area_index >= 4lai and resource.labor_left_min >= 25min => prune_light
      otherwise => keep

Ne recopie pas necessairement cet exemple. Cherche une politique originale,
prudente face aux seuils critiques, capable de gerer ses ressources sur 21
jours et robuste aux differences entre les trois repetitions.

## Execution et scellement

GardenArena compile ta reponse avec le compilateur Rust
`garden-script-compiler-v0.2`. Le programme est ensuite evalue localement :

- zero appel LLM pendant les 21 jours ;
- zero appel reseau depuis GardenScript ;
- source et IR canonique identifies par SHA-256 ;
- prompt, reponse brute, modele declare et version visible archives ;
- aucune revision de strategie apres le scellement.

Avant de repondre, verifie silencieusement : en-tete, setup, cinq canaux dans
l'ordre, au moins un `when` et un `otherwise` par canal, unites, actions,
budgets et absence de texte hors programme. Puis reponds uniquement avec la
source GardenScript.
