# Recherche : Vestes pour la pluie et le vent : coupe-vent léger de mi-saison et vestes chaudes d'hiver

**Catégorie** : vestes
**Intention** : Recherche comparative de vestes pour homme adaptées à la pluie et au vent en France pour l'automne 2026, couvrant deux cas d'usage distincts dans une même grille : d'une part les coupe-vent et vestes imperméables légères de mi-saison (non isolées, packables, type K-Way), et d'autre part les vestes chaudes pour le froid (isolées en ouate ou duvet, ou systèmes 3-en-1) offrant si possible une protection imperméable. Les modèles recherchés visent un usage quotidien urbain et périurbain (trajets domicile-travail, marche, balades), avec des performances techniques réelles et vérifiables. L'exploration doit couvrir en priorité la marque K-Way en référence historique, complétée par les marques majeures Quechua/Decathlon, Patagonia, The North Face, Columbia, Salomon, Arc'teryx, Vaude, Marmot, Rab, Millet, Helly Hansen et Uniqlo. Sont formellement exclus les équipements de sport intensif (trail running, cyclisme de compétition), les tenues de pluie professionnelles de chantier ou de mer, ainsi que les articles d'occasion ou de seconde main.

> **Consigne de recherche** : Utilise la recherche web et tes connaissances pour cibler en priorité les fiches techniques officielles pour les caractéristiques brutes, et les tests/comparatifs indépendants de référence (presse experte, bancs d’essai) pour repérer les qualités et défauts réels. Évite les comparateurs d’affiliation génériques. Renseigne les faits mesurés dans `values`, et réserve tes remarques sur la qualité ou les défauts constatés aux champs `notes.<clé>`, `agent.rationale` ou `review`.

## Critères à renseigner

| clé | libellé | type | unité | sens | rôle | description |
| --- | --- | --- | --- | --- | --- | --- |
| `impermeabilite_mm` | Imperméabilité | number | mm | plus haut = mieux | **décisif** (poids 5/5) | Hauteur de colonne d'eau supportée en millimètres selon la norme ISO 811 (test Schmerber), mesurant la résistance du tissu à la pénétration de l'eau. |
| `prix_catalogue` | Prix catalogue | number | EUR | plus bas = mieux | **décisif** (poids 4/5) | Prix public indicatif de référence constaté sur le catalogue officiel du fabricant à la date des sources, hors remises promotionnelles ou soldes ponctuelles. |
| `coupe_vent` | Protection coupe-vent | bool | — | — | **décisif** (poids 4/5) | Capacité du tissu ou de la membrane à bloquer totalement le passage de l'air pour empêcher le refroidissement éolien. |
| `etancheite_coutures` | Étanchéité des coutures | enum | — | — | **décisif** (poids 3/5) | Niveau d'étanchéification des coutures par bandes thermocollées empêchant l'eau de s'infiltrer par les trous de piqûre. |
| `poids_g` | Poids | number | g | plus bas = mieux | **décisif** (poids 3/5) | Poids total du vêtement en grammes mesuré pour la taille homme standard de référence (taille M). |
| `famille_veste` | Famille de veste | enum | — | — | informatif | Typologie du vêtement permettant de distinguer et filtrer entre le coupe-vent ou imperméable léger sans doublure et la veste chaude d'hiver. |
| `respirabilite_ret` | Respirabilité (RET) | number | RET | plus bas = mieux | informatif | Résistance évaporative thermique selon la norme ISO 11092 en m²·Pa/W (plus l'indice est bas, plus la transpiration s'évacue facilement). |
| `plage_temperature` | Plage de température d'usage | enum | — | — | informatif | Plage thermique indicative d'utilisation confortable pour un usage quotidien urbain ou une marche lente. |
| `type_isolation` | Isolation thermique | enum | — | — | informatif | Nature du garnissage ou de la doublure intérieure assurant l'apport et la rétention de chaleur corporelle. |
| `packable` | Rangement packable | bool | — | — | informatif | Capacité de la veste à se replier entièrement dans sa propre poche zippée pour un rangement compact en sac ou à la ceinture. |
| `type_capuche` | Type de capuche | enum | — | — | informatif | Configuration de la capuche et présence de cordons de serrage pour maintenir le champ de vision sous les rafales de vent. |
| `traitement_deperlant` | Traitement déperlant (DWR) | enum | — | — | informatif | Traitement chimique de surface déperlant durable appliqué sur le tissu extérieur pour faire perler les gouttes d'eau. |
| `zips_aeration` | Zips d'aération sous les bras | bool | — | — | informatif | Présence de fermetures à glissière sous les aisselles permettant une aération mécanique modulable lors d'efforts de marche ou de vélo. |
| `tailles_disponibles` | Tailles disponibles | text | — | — | informatif | Gamme des tailles masculines standards commercialisées en France au catalogue public (ex. XS à 3XL). |

## Règles

- Objectif : trouver des objets **nouveaux**, absents de la liste des clés déjà connues ci-dessous.
- `agent.score` et `agent.rationale` sont facultatifs ici : ne les remplis que si tu as de quoi les justifier.
- Les critères marqués **décisifs** sont ceux qui tranchent : les renseigner en priorité, et ne jamais les laisser en `unknown` sans avoir vraiment cherché. Les critères *informatifs* sont du contexte : les remplir si l’information se trouve facilement, sans y passer de temps.
- Ne jamais inventer une valeur. Si tu ne la trouves pas : `"values": { "<clé>": null }` **et** `"status": { "<clé>": "unknown" }`. Si le critère ne s’applique pas à cet objet : `"status": { "<clé>": "na" }`, sans entrée dans `values`.
- Fournir une `sources[<clé>].url` pour toute valeur non triviale, avec `conf` (0–1) et `at` (date de constat, AAAA-MM-JJ). Une valeur sans source sera affichée comme non fiable. **Ne fabrique jamais d’URL fictive** : si tu n’as pas le lien direct vers la fiche technique ou le test précis, renvoie le domaine officiel du fabricant ou laisse la source vide — une absence de source est toujours préférable à un lien inventé.
- Le prix demandé est le **prix catalogue / prix public constaté**, pas le meilleur prix trouvé. Indiquer sa date dans `sources`. Aucune chasse à la promotion.
- `brand` et `model` sont obligatoires et **séparés** : ils servent à calculer la clé de déduplication. « Dell » + « U2724DE », jamais « Dell U2724DE » dans un seul champ.
- **Un objet = un modèle, par défaut.** `brand` + `model` forme la clé unique, et `values` affiche la configuration d’entrée (la moins chère sans option). Pour les autres déclinaisons d’un modèle :
  - Déclinaison simple sans impact sur le prix (coloris, dimensions équivalentes) : `"variants": { "coloris": ["noir", "argent"] }`.
  - Déclinaison qui change le prix ou d’autres valeurs (capacité, puissance) : `"configurations": [{ "label": "2 To", "values": { "stockage": 2000, "prix_catalogue": 249 } }]` (sans répéter ce qui ne change pas).
  - Si aucune déclinaison n’est utile, ne renseigne ni l’un ni l’autre.
- Les valeurs listées pour une énumération sont une **indication, pas une liste fermée** : si aucune ne décrit l’objet, écrire la valeur exacte plutôt que `null`, et le signaler dans `review.warnings`.
- Une date se donne au niveau de précision que la source donne : `2025`, `2025-09` ou `2025-09-15`. **Ne jamais inventer un jour** pour compléter un format.
- S’il manque un critère et que tu peux le renseigner, déclare-le dans `criteria` (`key` en snake_case, `label`, `type`, et `unit` / `better` s’ils s’appliquent) **et remplis sa valeur** dans `items[].values` : il n’entrera qu’après acceptation de l’utilisateur, mais il arrivera rempli. `review.criteria_suggestions` reste pour ce que tu suggères sans pouvoir le remplir.
- Si la **définition** d’un critère existant te paraît fausse, redéclare-le dans `criteria` avec la définition juste — `better` inversé quand le tableau trie à l’envers, valeurs d’énumération manquantes ajoutées. Ce sera proposé à l’utilisateur, jamais appliqué d’office. Ne change pas le `type` d’un critère : ça casserait les valeurs déjà stockées ; signale-le dans `review.warnings` à la place.
- Respecter les unités déclarées par les critères. Ne pas écrire l’unité dans la valeur : `549`, pas `"549 EUR"`.
- Tu as le droit — et l’intérêt — d’ajouter un commentaire libre sur **une valeur** précise dans `notes.<clé>` : une nuance, une condition, « mesuré » plutôt qu’« annoncé ». Ça ne remplace jamais une source.
- Si la recherche elle-même te semble perfectible, dis-le dans le bloc `review` : angle mort, critère mal défini, arbitrage discutable, budget incohérent avec les exigences, critère à ajouter. **Ne te censure pas** — c’est utile. Mais garde `review` séparé des `items` : ton avis n’est jamais une valeur.
- Si tu as examiné un objet puis l’as écarté, dis-le dans `review.discarded` (`brand`, `model`, `why`) plutôt que de le passer sous silence — ça évite qu’un autre modèle le repropose plus tard.
- Répondre **uniquement** par le JSON, sans texte avant ni après, sans bloc de code, sans commentaire. Tout ce que tu aurais écrit autour du JSON a sa place dans `review.comment`.

## Objets déjà connus — à ne pas reproposer

- `bitpanda-broker`
- `bitstack-standard`
- `bitvavo-standard`
- `coinbase-advanced`
- `coinhouse-classique`
- `deblock-standard`
- `finst-standard`
- `kraken-pro`
- `meria-invest`
- `paymium-standard`
- `swissborg-standard`
- `trade-republic-compte-titres-crypto`
- `tudor-1926-36`
- `tudor-black-bay-36`
- `tudor-black-bay-39`
- `tudor-black-bay-58`
- `tudor-black-bay-58-gmt`
- `tudor-black-bay-pro`
- `tudor-pelagos-39`
- `tudor-ranger`
- `tudor-royal-36`

## Objets rejetés — à ne jamais reproposer

_(aucun)_

## Déjà examinés et écartés — ne pas les reproposer

- `binance-spot` — Exclue du marché français depuis le 1er juillet 2026 suite à la fin de la période transitoire MiCA sans obtention d'agrément CASP ; n'accepte plus de nouveaux clients français ni de nouveaux dépôts.
- `bybit-spot` — A cessé ses activités et suspendu l'accès à ses services pour les résidents français suite aux avertissements et mises en demeure de l'AMF.
- `etoro-standard` — Courtier orienté CFD multi-actifs avec des commissions intégrées élevées (1% à 2%) et des retraits crypto on-chain très contraignants nécessitant un wallet propriétaire intermédiaire (eToro Money).
- `revolut-standard` — Néobanque grand public appliquant des commissions élevées (1,49% à 1,99% pour les comptes gratuits) et dépourvue d'outils optimisés pour la fiscalité crypto française.
- `maxxis-premitra-hp5` — Conception vieillissante (2016) et efficacité énergétique en retrait par rapport à la génération actuelle.

## Format de sortie exigé (JSON Schema)

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": [
    "items"
  ],
  "additionalProperties": false,
  "properties": {
    "review": {
      "type": "object",
      "additionalProperties": false,
      "description": "Ton avis sur la recherche elle-même. Facultatif mais bienvenu : c’est le seul endroit où tu peux écrire librement.",
      "properties": {
        "comment": {
          "type": "string",
          "description": "Ce que tu penses de la question posée : angle mort, arbitrage discutable, contexte utile, conseil."
        },
        "warnings": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Ce qui devrait être corrigé avant de continuer (critère mal défini, budget incohérent…)."
        },
        "discarded": {
          "type": "array",
          "description": "Objets que tu as examinés puis écartés, avec la raison. Évite qu’un autre modèle les repropose plus tard.",
          "items": {
            "type": "object",
            "required": [
              "brand",
              "model",
              "why"
            ],
            "additionalProperties": false,
            "properties": {
              "brand": {
                "type": "string"
              },
              "model": {
                "type": "string"
              },
              "why": {
                "type": "string",
                "description": "Pourquoi il ne convient pas, en une phrase."
              }
            }
          }
        },
        "criteria_suggestions": {
          "type": "array",
          "description": "Critères que tu ajouterais, avec la raison.",
          "items": {
            "type": "object",
            "required": [
              "label",
              "why"
            ],
            "additionalProperties": false,
            "properties": {
              "label": {
                "type": "string"
              },
              "type": {
                "enum": [
                  "number",
                  "enum",
                  "bool",
                  "text",
                  "url",
                  "image",
                  "date"
                ]
              },
              "unit": {
                "type": "string"
              },
              "better": {
                "enum": [
                  "higher",
                  "lower"
                ]
              },
              "role": {
                "enum": [
                  "decisive",
                  "informative"
                ]
              },
              "why": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "criteria": {
      "type": "array",
      "description": "Critères que tu ajoutes toi-même et que tu renseignes dans `items[].values`. Ils n’entrent dans la recherche qu’après acceptation explicite de l’utilisateur.",
      "items": {
        "type": "object",
        "required": [
          "key",
          "label",
          "type"
        ],
        "additionalProperties": false,
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^[a-z0-9]+(_[a-z0-9]+)*$",
            "description": "snake_case, sans accent."
          },
          "label": {
            "type": "string"
          },
          "type": {
            "enum": [
              "number",
              "enum",
              "bool",
              "text",
              "url",
              "image",
              "date"
            ]
          },
          "unit": {
            "type": "string"
          },
          "better": {
            "enum": [
              "higher",
              "lower"
            ]
          },
          "role": {
            "enum": [
              "decisive",
              "informative"
            ]
          },
          "description": {
            "type": "string",
            "description": "Pourquoi ce critère compte ici."
          },
          "values": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`enum` : valeurs observées."
          },
          "order": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "`enum` : du pire au meilleur, seulement si l’échelle est un fait et non un goût."
          }
        }
      }
    },
    "items": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": [
          "brand",
          "model",
          "name",
          "values"
        ],
        "additionalProperties": false,
        "properties": {
          "brand": {
            "type": "string",
            "description": "Marque seule, sans le modèle. Obligatoire."
          },
          "model": {
            "type": "string",
            "description": "Référence du modèle seule, sans la marque. Obligatoire."
          },
          "name": {
            "type": "string",
            "description": "Libellé commercial complet."
          },
          "url": {
            "type": "string",
            "description": "Fiche produit ou page constructeur."
          },
          "image": {
            "type": "string",
            "description": "URL d’une image du produit."
          },
          "values": {
            "type": "object",
            "properties": {
              "famille_veste": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Famille de veste de préférence parmi : coupe-vent léger, imperméable léger de mi-saison, veste chaude isolée, veste modulable 3-en-1 — Typologie du vêtement permettant de distinguer et filtrer entre le coupe-vent ou imperméable léger sans doublure et la veste chaude d'hiver."
              },
              "prix_catalogue": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "[décisif] Prix catalogue en EUR (plus bas = mieux) — Prix public indicatif de référence constaté sur le catalogue officiel du fabricant à la date des sources, hors remises promotionnelles ou soldes ponctuelles."
              },
              "impermeabilite_mm": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "[décisif] Imperméabilité en mm (plus haut = mieux) — Hauteur de colonne d'eau supportée en millimètres selon la norme ISO 811 (test Schmerber), mesurant la résistance du tissu à la pénétration de l'eau."
              },
              "coupe_vent": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "[décisif] Protection coupe-vent — Capacité du tissu ou de la membrane à bloquer totalement le passage de l'air pour empêcher le refroidissement éolien."
              },
              "etancheite_coutures": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[décisif] Étanchéité des coutures de préférence parmi : coutures non étanchées, coutures principales étanchées, coutures intégralement thermosoudées — Niveau d'étanchéification des coutures par bandes thermocollées empêchant l'eau de s'infiltrer par les trous de piqûre."
              },
              "poids_g": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "[décisif] Poids en g (plus bas = mieux) — Poids total du vêtement en grammes mesuré pour la taille homme standard de référence (taille M)."
              },
              "respirabilite_ret": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "[informatif] Respirabilité (RET) en RET (plus bas = mieux) — Résistance évaporative thermique selon la norme ISO 11092 en m²·Pa/W (plus l'indice est bas, plus la transpiration s'évacue facilement)."
              },
              "plage_temperature": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Plage de température d'usage de préférence parmi : mi-saison douce (> 12°C), mi-saison fraîche (5°C à 12°C), froid hivernal (-5°C à 5°C), grand froid (< -5°C), toutes saisons (système 3-en-1) — Plage thermique indicative d'utilisation confortable pour un usage quotidien urbain ou une marche lente."
              },
              "type_isolation": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Isolation thermique de préférence parmi : aucune (shell non doublé), doublure filet ou tissu léger, ouate synthétique, duvet naturel, doublure polaire amovible, doudoune intérieure amovible — Nature du garnissage ou de la doublure intérieure assurant l'apport et la rétention de chaleur corporelle."
              },
              "packable": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "[informatif] Rangement packable — Capacité de la veste à se replier entièrement dans sa propre poche zippée pour un rangement compact en sac ou à la ceinture."
              },
              "type_capuche": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Type de capuche de préférence parmi : capuche fixe ajustable, capuche fixe non ajustable, capuche escamotable dans le col, capuche amovible, sans capuche — Configuration de la capuche et présence de cordons de serrage pour maintenir le champ de vision sous les rafales de vent."
              },
              "traitement_deperlant": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Traitement déperlant (DWR) de préférence parmi : déperlant sans PFC/PFAS (DWR PFC-free), déperlant classique (DWR), enduction sans déperlant de surface, aucun traitement déperlant — Traitement chimique de surface déperlant durable appliqué sur le tissu extérieur pour faire perler les gouttes d'eau."
              },
              "zips_aeration": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "[informatif] Zips d'aération sous les bras — Présence de fermetures à glissière sous les aisselles permettant une aération mécanique modulable lors d'efforts de marche ou de vélo."
              },
              "tailles_disponibles": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "[informatif] Tailles disponibles — Gamme des tailles masculines standards commercialisées en France au catalogue public (ex. XS à 3XL)."
              }
            },
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean",
                "null"
              ]
            },
            "description": "Une entrée par critère. Une clé hors du tableau ci-dessus exige un critère déclaré dans `criteria`."
          },
          "status": {
            "type": "object",
            "additionalProperties": {
              "enum": [
                "unknown",
                "na"
              ]
            },
            "properties": {
              "famille_veste": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "prix_catalogue": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "impermeabilite_mm": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "coupe_vent": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "etancheite_coutures": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "poids_g": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "respirabilite_ret": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "plage_temperature": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "type_isolation": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "packable": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "type_capuche": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "traitement_deperlant": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "zips_aeration": {
                "enum": [
                  "unknown",
                  "na"
                ]
              },
              "tailles_disponibles": {
                "enum": [
                  "unknown",
                  "na"
                ]
              }
            },
            "description": "\"unknown\" = cherché et introuvable ; \"na\" = non applicable à cet objet."
          },
          "sources": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "conf": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "at": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                }
              },
              "required": [
                "url"
              ],
              "additionalProperties": false
            },
            "properties": {
              "famille_veste": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "prix_catalogue": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "impermeabilite_mm": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "coupe_vent": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "etancheite_coutures": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "poids_g": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "respirabilite_ret": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "plage_temperature": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "type_isolation": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "packable": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "type_capuche": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "traitement_deperlant": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "zips_aeration": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              },
              "tailles_disponibles": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "conf": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "at": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  }
                },
                "required": [
                  "url"
                ],
                "additionalProperties": false
              }
            }
          },
          "variants": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": [
                  "string",
                  "number",
                  "boolean"
                ]
              }
            },
            "properties": {
              "famille_veste": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "prix_catalogue": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "impermeabilite_mm": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "etancheite_coutures": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "poids_g": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "respirabilite_ret": {
                "type": "array",
                "items": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "plage_temperature": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type_isolation": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type_capuche": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "traitement_deperlant": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "description": "Les déclinaisons du même modèle, par critère : `{ \"stockage\": [256, 512, 1024] }` — la valeur affichée comprise. La configuration d’entrée reste dans `values` ; ce tableau ne fait qu’élargir l’admissibilité, jamais le classement."
          },
          "configurations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "values": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              },
              "required": [
                "values"
              ]
            },
            "description": "Déclinaisons cohérentes : une entrée = un jeu de valeurs qui existent ensemble. À utiliser dès qu’une déclinaison change une autre valeur, le prix en premier : `[{ \"label\": \"2 To\", \"values\": { \"stockage\": 2000, \"prix\": 249 } }]`. Ne pas y répéter ce qui ne change pas."
          },
          "notes": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "properties": {
              "famille_veste": {
                "type": "string"
              },
              "prix_catalogue": {
                "type": "string"
              },
              "impermeabilite_mm": {
                "type": "string"
              },
              "coupe_vent": {
                "type": "string"
              },
              "etancheite_coutures": {
                "type": "string"
              },
              "poids_g": {
                "type": "string"
              },
              "respirabilite_ret": {
                "type": "string"
              },
              "plage_temperature": {
                "type": "string"
              },
              "type_isolation": {
                "type": "string"
              },
              "packable": {
                "type": "string"
              },
              "type_capuche": {
                "type": "string"
              },
              "traitement_deperlant": {
                "type": "string"
              },
              "zips_aeration": {
                "type": "string"
              },
              "tailles_disponibles": {
                "type": "string"
              }
            },
            "description": "Commentaire libre sur UNE valeur : nuance, condition, mesure vs annonce. Facultatif, une phrase."
          },
          "agent": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "score": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "rank": {
                "type": "integer",
                "minimum": 1
              },
              "rationale": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
```

## Exemple minimal de réponse valide

```json
{
  "review": {
    "comment": "Ce que je pense de la recherche elle-même : ce qui manque, ce qui me semble discutable.",
    "warnings": [
      "Un point à corriger avant de continuer, s’il y en a un."
    ],
    "criteria_suggestions": [
      {
        "label": "Critère que j’ajouterais",
        "type": "number",
        "better": "higher",
        "why": "Pourquoi il compte ici."
      }
    ]
  },
  "items": [
    {
      "brand": "Marque",
      "model": "REF-123",
      "name": "Marque REF-123",
      "url": "https://exemple.tld/produit",
      "values": {
        "prix_catalogue": 123,
        "impermeabilite_mm": 123,
        "coupe_vent": null,
        "etancheite_coutures": "coutures non étanchées"
      },
      "status": {
        "coupe_vent": "unknown"
      },
      "sources": {
        "prix_catalogue": {
          "url": "https://exemple.tld/source",
          "conf": 0.9,
          "at": "2026-01-15"
        },
        "impermeabilite_mm": {
          "url": "https://exemple.tld/source",
          "conf": 0.9,
          "at": "2026-01-15"
        },
        "etancheite_coutures": {
          "url": "https://exemple.tld/source",
          "conf": 0.9,
          "at": "2026-01-15"
        }
      },
      "notes": {
        "prix_catalogue": "Nuance sur cette valeur précise, en une phrase."
      }
    }
  ]
}
```

Rappel : ta réponse doit être **le JSON seul**, sans les balises ```json, sans phrase d’introduction ni de conclusion. Si tu as des remarques à faire — et tu en as probablement — elles vont dans `review`, à l’intérieur du JSON.
