{
  "summary": "Brancher les composants ORIGINAUX sur les données WP (parité pixel) + audit code adversarial",
  "agentCount": 12,
  "logs": [
    "[param:oneoff2] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "Paramétrage : 5/6 familles livrées",
    "[audit:home] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "[audit:produits] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "[audit:industrie] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "[audit:oneoff1] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "[audit:mappers-data] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "[audit:oneoff2] failed: You've hit your monthly spend limit · raise it at claude.ai/settings/usage",
    "Audit : 0 bloquants, 0 mineurs"
  ],
  "result": {
    "familles": 5,
    "fichiers": 95,
    "bloquantsCorriges": 0,
    "mineurs": [],
    "limites": [
      "Sections du seed SANS adaptateur dans la home : 'composant_react estimation' (le formulaire vit DANS le Hero original, codé en dur — le titre WP 'Estimez votre budget' de cette section n'est pas mappé) et la section 'logos' clients (le marquee logos vit dans le Hero, liste codée en dur ; TrustLogos.tsx n'est pas rendu par Index.tsx donc non paramétré, conformément à la consigne 'si rendu'). Le seed devra pointer ces deux sections vers aucune origine ou les masquer pour éviter un doublon via le block générique Logos/ComposantReact.",
      "Hero.lead : l'original met 3 <strong> dans le paragraphe ; le seed fournit un lead en texte brut — si le WP renseigne lead, les graisses disparaissent (le défaut sans props reste identique). Même logique partout : la parité pixel parfaite n'est garantie que quand la donnée WP est absente OU identique au texte d'origine.",
      "SEOContent : le corps WP est du wysiwyg sans classes Tailwind ; l'adaptateur réinjecte un styling approchant via sélecteurs [&_strong]/[&_ul]/[&_ol]/[&_table], mais le tableau comparatif mobile de l'original (cards empilées) n'est pas reproduit (le <table> HTML s'affiche aussi en mobile) et les coins arrondis du thead ne sont pas répliqués — à vérifier dans la boucle de diff pixel (tâche #9).",
      "Heuristiques d'adaptation dépendantes du FORMAT du seed : split ' — ' des entêtes de colonnes (PriceComparison/PriceVS), split de la 1re phrase de texte_apres pour l'encart PriceComparison, citation « … » — auteur dans les textes d'étapes SystemSection, lignes '-' = puces dans PriceVS. Si un éditeur WP change ces formats, le mapping dégrade proprement vers les défauts ou un rendu partiel.",
      "ExpertiseSection/RSESection/SystemSection/ProcessSection : icônes, couleurs, flags featured et numéros mappés PAR INDEX sur le skeleton original (le champ WP cards[].icone est ignoré) ; ajouter/réordonner des items côté WP au-delà de l'original ne crée pas de nouvelles cartes (Expertise/RSE/System plafonnés au nombre d'items du skeleton).",
      "PriceComparisonSection mobile : les abréviations de colonnes ('Clim', 'Membrane', 'Réfection') restent codées en dur — un renommage de colonne côté WP ne s'applique qu'au tableau desktop.",
      "Les adaptateurs ne sont pas encore exercés en conditions réelles : les sections seedées ne portent pas encore le champ `origine` (tâche #9 - seeds origine + re-seed + diff pixel). Le smoke test (page / en 200 avec les contenus) valide l'absence de régression mais pas le chemin adaptateur de bout en bout.",
      "git status du worktree contient des modifications d'autres agents (fragments wp, BlockRenderer, types.ts…) — je n'ai touché que les 20 fichiers listés (19 composants + origine/home.tsx).",
      "Les sections cta (CTASection) et texte_image 'Réseau d'applicateurs' (ApplicatorsSection) des seeds produit pointent vers des composants partagés hors src/components/product/** : adaptateurs à fournir par la famille qui possède ces composants (clé suggérée : 'CTASection', 'ApplicatorsSection').",
      "Les seeds ne portent pas encore de champ 'origine' : l'agent de la tâche #9 doit y inscrire les clés du registry listées dans le résumé (suffixe produit pour les génériques : ProductHeroCovaTherm, CompatibilityTabsCovaSeal, ProductFAQCovaMetal, RelatedProductsCovaThermLight, etc.).",
      "Champs riches (intros avec <strong>, textes de pied avec liens, contenu des showcases, corps des éditoriaux/guide) : parité pixel garantie tant que le contenu WP est identique au seed (comparaison normalisée / hash djb2 calculés sur les seeds) ; dès qu'un texte est édité dans le BO, le rendu bascule sur du texte plat ou du HTML stylé approchant (puces custom et cercles numérotés du CoolRoofGuide non reproduits à l'identique).",
      "Si WPGraphQL/ACF réécrit le HTML des wysiwyg (wpautop, entités, guillemets), les hashes des contenu_seo ne matcheront plus le seed et les éditoriaux passeront en branche HTML générique même sans édition — à vérifier lors de la boucle de diff pixel (tâche #9) et recalculer les constantes le cas échéant (564420437 / 2142459583 / 1375046801 / 2432885520 dans produits.tsx).",
      "Le tagline et l'accentColor du hero, les pills 'Recommandé'/'2-en-1'/'3-en-1'/'Laque solaire', le callout vitrage de CompatibilityTabs, le lien 'Devis gratuit' des notes de showcase et le H2 'en clair.' des éditoriaux n'ont pas de champ WP : ils restent pilotés par les défauts (non éditables côté BO).",
      "Le flag 'incompatible' (Vitrage, CovaTherm Light) n'existe pas dans le schéma compatibilite_supports : reconstruit par heuristique type === 'Vitrage' dans l'adaptateur.",
      "RelatedProducts : les cards (tag, accroche, visuel) ne sont pas dans fiche_produit ; l'adaptateur ne fait que sélectionner/ordonner le catalogue d'origine via les slugs WP.",
      "Réponses FAQ riches : rendues via dangerouslySetInnerHTML avec liens stylés [&_a] — très proche mais non strictement identique aux ReactNodes des vues (qui restent utilisés par les routes fallback).",
      "ProductShowcase : l'état initial du toggle passe à l'index 0 si une seule variante est fournie par WP (identique à l'original avec les 2 variantes par défaut).",
      "Composants 1-pour-N rows WP : IndustrieProof, LogistiqueBenefits, DistributionBenefits et DistributionProof couvrent chacun 2-3 rows du flexible (chiffres + grille_cards + references_grille/logos). L'adaptateur Benefits détecte chiffres vs cards, mais il ne faut poser `origine` que sur UNE seule row par composant sinon double rendu ; les rows references_grille et logos des blocs Proof ne sont pas adaptées (logos/références = défauts codés, props exposées pour un branchement futur).",
      "IndustrieProof rendu via adaptateur utilise sector='industrie' par défaut : sur la page logistique (qui réutilise IndustrieProof sector='logistique' en dur), la section WP ne porte pas l'info secteur — le filtre des références retomberait sur Industrie.",
      "Intros riches (strong/liens) : quand le seed fournit un intro en texte brut (LogistiqueProblem, LogistiqueSolution, DistributionCEE), l'adaptateur passe la string WP et les <strong>/<a> de l'original sont perdus si la valeur WP est renseignée ; sans valeur WP le défaut JSX riche est conservé.",
      "Reconstructions heuristiques de titres : hubHeroTitre (virgule -> <br/> + span muted), distMethodTitre (split en phrases), commaBreak, colonBreak et la métrique des cartes solution (motif « jusqu'à X ») supposent les formats exacts des seeds ; un contenu BO très différent rend un markup plus simple (une ligne) mais valide.",
      "IndustrieApplications : les liens par carte du seed (lien:#preuves) sont ignorés, le href '#preuves' reste codé en dur (identique au site actuel) ; champ `icone` WP ignoré partout (squelette d'icônes conservé, conforme au pattern home).",
      "Merge par index : si WP fournit plus d'items que le squelette par défaut (stats, cartes, étapes), les extras sont ignorés (les icônes n'existent pas côté WP) ; s'il en fournit moins, les items par défaut restants s'affichent.",
      "Images mobiles non couvertes par le schéma WP (LogistiqueHero source mobile, LogistiqueSolution mobileImage) : restent sur les assets par défaut ; l'image WP des solutions n'écrase que la carte cool roof (le seed ne fournit qu'une image).",
      "toSectorConfig : matching par layout + ordre (badged grille_cards n°1=problème, n°2=applications, texte_image avec/sans CTA, chiffres clair/sombre) — robuste pour les 4 seeds actuels mais sensible à un réordonnancement inhabituel dans le BO ; champ `origine` non discriminant faute de convention de nommage par sous-section ; hero.formFields (options des selects), proof.transition, finalCta.eyebrow, seo.eyebrow, benefits.image et reassurance band restent sur le fallback (absents du schéma WP).",
      "Footnote de DistributionSEOContent et eyebrows des dossiers SEO : non présents dans le layout contenu_seo, défauts conservés.",
      "Champs seed inutilisés — contact : grille_cards.colonnes et .theme, cards[].icone (icônes résolues par position/nom dans le mapper), composant_react.composant (la vue rend toujours HubSpotContactForm et l'iframe carte en dur, MAP_URL n'a pas de champ WP) ; l'eyebrow 'Formulaire', le pill 'Demande transmise', la mention RGPD, le label 'Localisation' et le StickyMobileCTA (label/tel) restent en dur faute de champ seed.",
      "Champs seed inutilisés — faq : faq.json_ld (la vue n'émet pas de JSON-LD), hero.variante, cta.variante ; le badge 'Une autre question ?' du CTA final reste en dur (pas de champ badge dans le layout cta).",
      "Champs seed inutilisés — references : references_grille.mode et .filtres (filtres toujours affichés, items de grille issus de src/data/references et non du CPT WP), hero.variante, cta.variante ; le badge 'Votre projet' du CTA final et le StickyMobileCTA restent en dur.",
      "Champs seed inutilisés — diagnostic : composant_react.composant (DiagnosticForm rendu en dur), logos.source='clients' (ClientLogosSlider a ses propres données internes), hero.variante.",
      "Champs seed inutilisés — estimation : composant_react.composant (formulaire d'estimation en dur, types de bâtiment/secteurs/taux €/m² non pilotables), hero.variante.",
      "Détail accent : le seed place l'espace avant le segment accent hors du span ('devis *gratuit.*') alors que l'original l'a dans le span ; le helper renderAccentTitre absorbe cette espace dans le span pour un DOM identique — rendu pixel-identique dans tous les cas.",
      "Apostrophes : certains défauts d'origine utilisent l'apostrophe droite (') alors que le seed utilise la typographique (’) ; en mode WP le texte affiché suit le seed (différence purement typographique, déjà présente dans les autres familles).",
      "Le worktree contient de nombreuses modifications parallèles d'autres agents (composants home/industrie/produits, fragments, BlockRenderer) ; le tsc --noEmit vert couvre l'ensemble mais seuls les 12 fichiers listés relèvent de cette tâche.",
      "Les erreurs tsc résiduelles du repo viennent de src/views/DevenirApplicateur.tsx (TS2304 partnerOffers/journeySteps/implantations/faqs), fichier modifié en parallèle par un autre agent et hors de ma liste — aucune erreur dans mes fichiers.",
      "CustomerReference.image : la featured image WP n'est pas exposée par la query GraphQL (src/lib/wp/queries/reference.ts ne fetch pas featuredImage) -> toujours comblée par la donnée codée ; une référence créée uniquement dans le BO n'aura pas d'image (la vue affiche alors son fallback gradient prévu).",
      "Champs structurellement absents du schéma WP, toujours en fallback codé : RoofPageData.productName, roi.situation.headers, path ; CustomerReference.sourceUrls, tags, highlightSectors, readiness, id — pour un slug inconnu du codé, des défauts sûrs s'appliquent (headers génériques, productName CovaTherm, readiness phase-2-ready).",
      "heroImage/compatibility.image et heroStats etc. issus de WP pointent vers https://covalba-admin.paf-studio.dev/... (mêmes octets que les fichiers locaux) : le round-trip est identique hors origine d'URL.",
      "La reconstruction texte suppose le format wysiwyg produit par l'export (p()/esc(), <h3> pour systemTitle, intro+afterComparison séparés par \\n\\n) ; un contenu fortement réécrit dans le BO (wpautop, balises additionnelles) reste rendu mais peut perdre la séparation intro/narrative ou text/systemTitle.",
      "showInGrid des références fusionnées avec leur doublon -grid (cora-houssen, danone-bailleul) vaut true côté WP alors que l'entrée détaillée codée porte false : comportement voulu (le post WP représente le post fusionné), sans effet sur la page détail.",
      "Le FAQPage JSON-LD n'est plus émis par le block générique faq sur les pages toitures ; comme dans la version d'origine, c'est le template/roofPageSeo qui porte la sémantique FAQ (la parité avec le site d'origine est la spec)."
    ]
  }
}