{
  "_meta": {
    "titre": "Matrice de vérification grammaticale — moteur FR de Ma communication",
    "version": 1,
    "date": "2026-08-06",
    "principe": "Cadres syntaxiques PAR SENS, pas une liste de terminaisons. Chaque règle se VERROUILLE par un test (corpus_gold) AVANT d'être codée. En cas d'ambiguïté, le moteur NE tranche PAS seul : il propose, ou conserve la formulation de la personne (jamais de correction silencieuse). Variantes panfrancophones/orales reconnues, jamais 'corrigées'.",
    "priorites": { "P0": "indispensable pour des phrases fiables", "P1": "vraie robustesse", "P2": "rare / soutenu / régional / avancé" },
    "confiance": { "haute": "règle stable et déterministe", "moyenne": "dépend du sens/contexte", "faible": "ambigu ou variable — souvent NE PAS trancher seul" },
    "strategie": "Vérifier d'abord ce que jsRealB (validé, Apache 2.0) génère déjà (conjugaison/accords) AVANT de coder à la main ; réserver le code maison aux cadres syntaxiques par sens, aux ambiguïtés et aux variantes.",
    "refs": ["Vitrine linguistique OQLF", "Éduscol terminologie grammaticale", "Académie française"]
  },

  "regles": [
    { "id": "R01-fiche-verbe", "bloc": 1, "priorite": "P0", "section": "1. Fiche lexicale du verbe",
      "declencheur": "tout verbe", "entree": "aider (aider qqn à faire), se souvenir (de qqch), manquer (à qqn / qqch)",
      "sortie_attendue": "cadre syntaxique par SENS : auxiliaire, pronominal ?, transitivité, préposition attendue, +infinitif ?, défectif ?",
      "variantes_admises": "plusieurs cadres par sens du même lemme", "confiance": "haute",
      "note": "stocker des cadres par sens, pas juste une liste de verbes" },

    { "id": "R02-temps-modes", "bloc": 1, "priorite": "P0", "section": "2. Modes/temps/formes",
      "declencheur": "conjugaison", "entree": "indicatif présent→futur antérieur ; conditionnel ; impératif ; formes non personnelles",
      "sortie_attendue": "formes correctes par temps", "variantes_admises": "subj. imparfait/pqp (P2, littéraire), 2e forme du conditionnel passé (P2), surcomposés (P2, régional)", "confiance": "moyenne",
      "note": "ne proposer P2 par défaut à personne" },

    { "id": "R03-irreguliers", "bloc": 1, "priorite": "P0", "section": "3. Irréguliers",
      "declencheur": "verbe fréquent irrégulier", "entree": "être, avoir, aller, faire, dire, pouvoir, vouloir, savoir, devoir, venir/tenir, prendre, mettre, voir…",
      "sortie_attendue": "formes stockées individuellement", "variantes_admises": "je paie/paye ; je balaie/balaye", "confiance": "haute" },

    { "id": "R04-familles-ortho", "bloc": 1, "priorite": "P0", "section": "3. Familles orthographiques",
      "declencheur": "-cer/-ger/-yer/-e_er/-é_er + appeler/jeter", "entree": "commencer→nous commençons ; manger→mangeons ; employer→j'emploie ; acheter→j'achète ; appeler→j'appelle ; céder→je cède",
      "sortie_attendue": "alternances de radical correctes", "variantes_admises": "rect. 1990 sur certains", "confiance": "haute" },

    { "id": "R05-defectifs", "bloc": 1, "priorite": "P1", "section": "3. Défectifs",
      "declencheur": "falloir, pleuvoir, seoir, échoir, choir, clore, frire, paître",
      "sortie_attendue": "seules les formes existantes ; JAMAIS inventer (pas de 'je faux', 'nous pleuvons')",
      "variantes_admises": "—", "confiance": "haute" },

    { "id": "R06-auxiliaire", "bloc": 1, "priorite": "P0", "section": "4. Choix être/avoir",
      "declencheur": "passé composé / temps composés", "entree": "elle est sortie / elle a sorti le chien ; il est monté / il a monté les valises",
      "sortie_attendue": "auxiliaire selon transitivité/sens ; distinguer aux. de conjugaison, du passif, verbe attributif",
      "variantes_admises": "auxiliaires régionaux (passer, demeurer…)", "confiance": "moyenne" },

    { "id": "R07-accord-sujet-verbe", "bloc": 1, "priorite": "P0", "section": "5. Accord sujet-verbe",
      "declencheur": "sujet(s)", "entree": "la fille vient / les filles viennent ; toi et moi, nous venons ; c'est moi qui suis",
      "sortie_attendue": "accord en personne/nombre ; qui→antécédent", "variantes_admises": "—", "confiance": "haute" },

    { "id": "R08-accord-sujet-complexe", "bloc": 2, "priorite": "P1", "section": "5. Sujets complexes",
      "declencheur": "et/ou/ni, collectifs, quantités, on, impersonnel", "entree": "Paul ou Léa viendra ; la plupart viennent ; plus d'un enfant est venu ; on est arrivées",
      "sortie_attendue": "accord selon le SENS", "variantes_admises": "les deux accords parfois recevables (majorité, la moitié…)", "confiance": "faible",
      "note": "souvent NE PAS trancher seul ; 'on' → référent si connu" },

    { "id": "R09-genre-nombre-nom", "bloc": 1, "priorite": "P0", "section": "6. Genre/nombre des noms",
      "declencheur": "nom", "entree": "œil→yeux ; travail→travaux ; un livre/une livre ; un tour/une tour",
      "sortie_attendue": "genre + pluriel depuis la FICHE du nom (pas déduit du mot seul)", "variantes_admises": "ciel→cieux/ciels selon sens", "confiance": "moyenne" },

    { "id": "R10-accord-det-nom-adj", "bloc": 1, "priorite": "P0", "section": "7. Accord dét-nom-adj",
      "declencheur": "GN", "entree": "un grand chien / des grandes chiennes ; beau→belle ; public→publique",
      "sortie_attendue": "accord genre/nombre + féminins/pluriels irréguliers", "variantes_admises": "—", "confiance": "haute" },

    { "id": "R11-adj-position-sens", "bloc": 2, "priorite": "P1", "section": "7. Position de l'adjectif",
      "declencheur": "adjectif antéposable", "entree": "un ancien professeur / un meuble ancien ; un grand homme / un homme grand",
      "sortie_attendue": "NE PAS déplacer l'adjectif sans comprendre le sens", "variantes_admises": "—", "confiance": "faible", "note": "ne jamais réordonner automatiquement" },

    { "id": "R12-adj-couleur", "bloc": 2, "priorite": "P1", "section": "7. Adjectifs de couleur",
      "declencheur": "couleur", "entree": "des robes bleues ; des chaussures marron ; des yeux bleu clair ; des chemises orange",
      "sortie_attendue": "simple varie ; nom-couleur & couleur composée invariables", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R13-mots-caprice", "bloc": 2, "priorite": "P1", "section": "7. tout/même/demi/nu/quelque…",
      "declencheur": "tout, même, demi, nu, quelque, tel, seul, ci-joint…", "entree": "elles sont toutes contentes / tout étonnées ; une demi-heure / deux heures et demie ; nu-pieds / les pieds nus",
      "sortie_attendue": "accord selon fonction/position", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R14-determinants", "bloc": 1, "priorite": "P0", "section": "8. Déterminants/contractions",
      "declencheur": "article/partitif + à/de", "entree": "à+le→au ; de+les→des ; du (partitif) vs du (de+le)",
      "sortie_attendue": "contractions ; de jeunes enfants (des→de antéposé) ; négation j'ai un chien→pas de chien (sauf portée : pas un chien mais deux)",
      "variantes_admises": "'des' oral conservé", "confiance": "moyenne" },

    { "id": "R15-elision-h", "bloc": 1, "priorite": "P0", "section": "9. Élision & h aspiré/muet",
      "declencheur": "je/me/te/se/le/la/de/ne/que/ce + voyelle ou h", "entree": "j'aime ; l'histoire ; le héros (h aspiré, PAS d'élision) ; s'il / jamais s'elle",
      "sortie_attendue": "élider sauf h aspiré", "variantes_admises": "—", "confiance": "haute",
      "note": "chaque mot en h porte une propriété h_muet/h_aspire (lexical)" },

    { "id": "R16-pp-etre-passif", "bloc": 1, "priorite": "P0", "section": "10. PP avec être / passif / adjectif",
      "declencheur": "PP avec être ou attribut", "entree": "elle est partie ; les portes sont fermées ; une porte fermée",
      "sortie_attendue": "accord avec le sujet (être) / le nom (adjectif)", "variantes_admises": "—", "confiance": "haute" },

    { "id": "R17-pp-avoir", "bloc": 1, "priorite": "P0", "section": "10. PP avec avoir (COD antéposé)",
      "declencheur": "PP avec avoir", "entree": "elle a mangé les pommes (pas d'accord) ; les pommes qu'elle a mangées ; elle les a mangées",
      "sortie_attendue": "accord SEULEMENT si COD précède", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R18-pp-cas-complexes", "bloc": 2, "priorite": "P1", "section": "10. PP cas complexes",
      "declencheur": "en, l', +infinitif, fait/laissé, mesure, impersonnel, pronominaux", "entree": "les enfants que j'ai vus courir ; les chansons que j'ai entendu chanter ; elle s'est lavé les mains ; elles se sont parlé ; elles se sont rendu compte ; qu'elle a fait construire (invariable)",
      "sortie_attendue": "analyse fonction du complément/se ; 'fait'+inf invariable ; réciproques indirects invariables",
      "variantes_admises": "'laissé'+inf : politique explicite (conserver la saisie ou variantes)", "confiance": "faible",
      "note": "LE gros chantier ; >30 sous-cas ; verrouiller par corpus" },

    { "id": "R19-pronoms-choix", "bloc": 1, "priorite": "P0", "section": "11. Choix du pronom (construction)",
      "declencheur": "pronominalisation", "entree": "je vois Paul→le vois ; je parle à Paul→lui parle ; je parle de Paul→en parle ; je vais à Paris→y vais",
      "sortie_attendue": "le/la/les, lui/leur, y, en, tonique — selon la construction du verbe", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R20-pronoms-ordre", "bloc": 1, "priorite": "P0", "section": "11. Ordre des pronoms",
      "declencheur": "≥2 pronoms clitiques", "entree": "je le lui donne ; je m'en souviens ; devant inf : je vais le lui donner",
      "sortie_attendue": "ordre me/te/se/nous/vous → le/la/les → lui/leur → y → en", "variantes_admises": "—", "confiance": "haute" },

    { "id": "R21-imperatif-pronoms", "bloc": 1, "priorite": "P0", "section": "11/15. Impératif + pronoms",
      "declencheur": "impératif", "entree": "donne-le-moi ; parles-en ; vas-y ; ne me le donne pas ; n'y va pas",
      "sortie_attendue": "affirmatif : ordre inversé, me→moi, traits d'union, -s euphonique devant en/y ; négatif : ordre ordinaire devant le verbe",
      "variantes_admises": "—", "confiance": "haute" },

    { "id": "R22-imperatif-formes", "bloc": 1, "priorite": "P0", "section": "15. Impératif (formes)",
      "declencheur": "impératif", "entree": "être→sois/soyons/soyez ; avoir→aie/ayons/ayez ; savoir→sache… ; mange (mais manges-en)",
      "sortie_attendue": "3 personnes (tu/nous/vous), irréguliers, pas de sujet", "variantes_admises": "—", "confiance": "haute" },

    { "id": "R23-negation", "bloc": 1, "priorite": "P0", "section": "13. Négation & restriction",
      "declencheur": "ne… X", "entree": "je ne viens pas ; je n'ai rien vu ; ne pas venir ; ne… que (restriction ≠ négation) ; ne explétif (crains qu'il ne tombe)",
      "sortie_attendue": "placement correct (simple/composé/inf/impératif) ; 'ne que' = restriction ; 'ne' explétif ≠ négatif ; PAS de 'ne' après 'sans que'",
      "variantes_admises": "chute du 'ne' à l'oral CONSERVÉE si choisie (proposer la forme écrite sans l'effacer)", "confiance": "moyenne" },

    { "id": "R24-interrogation", "bloc": 2, "priorite": "P1", "section": "14. Interrogation",
      "declencheur": "question", "entree": "tu viens ? ; est-ce que tu viens ? ; viens-tu ? ; viendra-t-il ? ; qu'est-ce qui arrive ?",
      "sortie_attendue": "intonation/est-ce que/inversion + t euphonique (a-t-il) ; indirecte SANS inversion (je demande où elle va)",
      "variantes_admises": "particule québécoise -tu (tu viens-tu ?) selon profil", "confiance": "moyenne" },

    { "id": "R25-subjonctif-declencheurs", "bloc": 2, "priorite": "P1", "section": "16. Subjonctif/indicatif",
      "declencheur": "verbe/conjonction régissant le mode", "entree": "je veux qu'elle vienne ; je pense qu'il vient / je ne pense pas qu'il vienne ; avant que… (subj) / après que… (indic)",
      "sortie_attendue": "mode selon la construction ; variation avec négation/interrogation", "variantes_admises": "indicatif possible si affirmation de réalité", "confiance": "faible",
      "note": "ne pas 'corriger' sans connaître l'intention" },

    { "id": "R26-conditionnelles-si", "bloc": 2, "priorite": "P1", "section": "17. Phrases en si",
      "declencheur": "subordonnée en 'si' de condition", "entree": "si tu viens, je partirai ; si tu venais, je partirais ; si tu étais venue, je serais partie",
      "sortie_attendue": "concordance ; PAS de conditionnel après 'si' de condition (éviter 'si j'aurais su')",
      "variantes_admises": "conditionnel après 'si' de concession/interrogation indirecte", "confiance": "moyenne" },

    { "id": "R27-concordance-discours", "bloc": 2, "priorite": "P1", "section": "18. Concordance & discours rapporté",
      "declencheur": "discours indirect", "entree": "elle dit : « je viendrai demain » → elle a dit qu'elle viendrait le lendemain",
      "sortie_attendue": "temps + repères déictiques (demain→le lendemain, ici→là, je→elle)", "variantes_admises": "—", "confiance": "moyenne",
      "note": "distinguer temps grammatical et repère temporel RÉEL (phrase figée avec 'demain' devient fausse le lendemain)" },

    { "id": "R28-inf-vs-que", "bloc": 2, "priorite": "P1", "section": "19. Infinitif vs subordonnée 'que'",
      "declencheur": "2 verbes", "entree": "je veux partir (même sujet) / je veux qu'elle parte (sujets différents) ; permettre à qqn DE partir",
      "sortie_attendue": "inf si même sujet ; 'que'+mode sinon ; préposition régie par le 1er verbe", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R29-causatif-perception", "bloc": 2, "priorite": "P1", "section": "20. Causatif & perception",
      "declencheur": "faire/laisser/voir/entendre + inf", "entree": "je le fais venir ; je lui fais réparer la voiture ; je vois Paul courir",
      "sortie_attendue": "ordre des compléments, pronom direct/indirect, accord PP, agent de l'infinitif", "variantes_admises": "—", "confiance": "faible" },

    { "id": "R30-passif", "bloc": 2, "priorite": "P1", "section": "21. Voix passive",
      "declencheur": "transitif direct", "entree": "Paul ouvre la porte → la porte est ouverte (par Paul)",
      "sortie_attendue": "être + PP accordé au sujet ; agent par/de ; distinguer état vs action (la porte est fermée)", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R31-impersonnel-presentatif", "bloc": 1, "priorite": "P0", "section": "22. Impersonnel & présentatif",
      "declencheur": "il faut / il y a / c'est / ce sont…", "entree": "il reste trois places ; c'est moi ; ce sont mes amis",
      "sortie_attendue": "modèles spécifiques", "variantes_admises": "c'est/ce sont : forme orale fréquente NON traitée comme faute", "confiance": "moyenne" },

    { "id": "R32-ordre-adverbes-detachement", "bloc": 2, "priorite": "P1", "section": "23. Ordre des mots / adverbes / détachement",
      "declencheur": "adverbe, complément, thème détaché", "entree": "elle a bien compris ; ce livre, je l'aime ; moi, je ne veux pas",
      "sortie_attendue": "place de l'adverbe (simple/composé) ; dislocations PRÉSERVÉES (très fréquentes à l'oral)", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R33-nombres-panfr", "bloc": 3, "priorite": "P1", "section": "25/28. Nombres & panfrancophonie",
      "declencheur": "nombre / région", "entree": "quatre-vingts / quatre-vingt-deux ; deux cents / deux cent trois ; septante, huitante/octante, nonante",
      "sortie_attendue": "accord vingt/cent, mille invariable, ordinaux ; variantes régionales rattachées à un PROFIL, jamais des fautes", "variantes_admises": "soixante-dix/septante ; 80/90 belges/suisses", "confiance": "moyenne" },

    { "id": "R34-oral-familier", "bloc": 3, "priorite": "P1", "section": "26. Formes familières/orales",
      "declencheur": "registre oral choisi", "entree": "moi j'en veux pas ; il est où mon sac ? ; c'est qui lui ?",
      "sortie_attendue": "RECONNAÎTRE et PRÉSERVER ; proposer l'écrit standard SANS remplacer silencieusement", "variantes_admises": "chute du ne, on=nous, sans inversion, régionalismes, jurons, alternance de langues", "confiance": "moyenne" },

    { "id": "R35-pronoms-genre-personne", "bloc": 1, "priorite": "P0", "section": "27. Pronoms/genre CHOISIS par la personne",
      "declencheur": "profil de la personne", "entree": "pronom sujet/compléments, genre grammatical, accords choisis, formes personnalisées/épicènes",
      "sortie_attendue": "NE JAMAIS déduire le genre (du prénom, voix, picto, apparence, relation) ; table d'accord personnalisée possible ; maintenir la formulation saisie",
      "variantes_admises": "épicène, accord choisi, formes non standard", "confiance": "haute", "note": "règle éthique clé (anti-validiste, autodétermination)" },

    { "id": "R36-phrases-preprogrammees", "bloc": 2, "priorite": "P0", "section": "29. Phrases préprogrammées = modèles",
      "declencheur": "phrase stockée", "entree": "[SUJET][VOULOIR:tps/pers][ARTICLE][OBJET] — pas 'Je veux le…' figé",
      "sortie_attendue": "phrase ANALYSÉE (sujet/interlocuteur/genre/nombre/temps/négation/déictiques), modifiable mot par mot", "variantes_admises": "—", "confiance": "moyenne" },

    { "id": "R37-ambiguites-ne-pas-trancher", "bloc": 1, "priorite": "P0", "section": "30. Ambiguïtés à ne pas trancher seul",
      "declencheur": "analyse incertaine", "entree": "l' (nom ou proposition ?) ; que (sujet ou complément ?) ; sortir (transitif ou non ?) ; on (indéterminé ou groupe ?) ; tour/tour",
      "sortie_attendue": "DEMANDER, proposer plusieurs résultats, ou CONSERVER la formulation — jamais de modification silencieuse de l'intention",
      "variantes_admises": "—", "confiance": "faible", "note": "règle-mère : en cas de doute, ne pas décider à la place de la personne" }
  ],

  "corpus_gold": [
    { "phrase": "Je vais au parc.", "priorite": "P0", "teste": ["R14", "R02"] },
    { "phrase": "J'irai au parc.", "priorite": "P0", "teste": ["R03", "R02"] },
    { "phrase": "J'irais au parc si je pouvais.", "priorite": "P1", "teste": ["R26"] },
    { "phrase": "Je suis allée au parc.", "priorite": "P0", "teste": ["R06", "R16", "R35"] },
    { "phrase": "Nous sommes allées au parc.", "priorite": "P0", "teste": ["R16", "R07"] },
    { "phrase": "Elle a sorti le chien.", "priorite": "P0", "teste": ["R06", "R37"] },
    { "phrase": "Elle est sortie avec le chien.", "priorite": "P0", "teste": ["R06", "R16"] },
    { "phrase": "Les pommes qu'elle a mangées.", "priorite": "P0", "teste": ["R17"] },
    { "phrase": "Des pommes, elle en a mangé.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Les enfants qu'elle a vus courir.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Les chansons qu'elle a entendu chanter.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elle s'est lavée.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elle s'est lavé les mains.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Les mains qu'elle s'est lavées.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elles se sont parlé.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elles se sont rendu compte de l'erreur.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elles se sont rendues indispensables.", "priorite": "P1", "teste": ["R18"] },
    { "phrase": "Elle le lui donne.", "priorite": "P0", "teste": ["R20"] },
    { "phrase": "Donne-le-lui.", "priorite": "P0", "teste": ["R21"] },
    { "phrase": "Ne le lui donne pas.", "priorite": "P0", "teste": ["R21", "R23"] },
    { "phrase": "Parles-en.", "priorite": "P0", "teste": ["R21"] },
    { "phrase": "N'en parle pas.", "priorite": "P0", "teste": ["R21", "R23"] },
    { "phrase": "Je ne veux plus y aller.", "priorite": "P0", "teste": ["R23", "R20"] },
    { "phrase": "Je n'en ai jamais parlé.", "priorite": "P0", "teste": ["R23", "R19"] },
    { "phrase": "Je ne veux que du pain.", "priorite": "P0", "teste": ["R23"] },
    { "phrase": "Je veux qu'elle vienne.", "priorite": "P1", "teste": ["R25", "R28"] },
    { "phrase": "Je pense qu'elle viendra.", "priorite": "P1", "teste": ["R25"] },
    { "phrase": "Je ne pense pas qu'elle vienne.", "priorite": "P1", "teste": ["R25"] },
    { "phrase": "Après qu'elle est partie.", "priorite": "P1", "teste": ["R25"] },
    { "phrase": "Avant qu'elle parte.", "priorite": "P1", "teste": ["R25"] },
    { "phrase": "Si tu viens, je partirai.", "priorite": "P0", "teste": ["R26"] },
    { "phrase": "Si tu venais, je partirais.", "priorite": "P1", "teste": ["R26"] },
    { "phrase": "Si tu étais venue, je serais partie.", "priorite": "P1", "teste": ["R26"] },
    { "phrase": "C'est moi qui suis prête.", "priorite": "P0", "teste": ["R07"] },
    { "phrase": "On est arrivées.", "priorite": "P1", "teste": ["R08", "R35"] },
    { "phrase": "La plupart des personnes sont parties.", "priorite": "P1", "teste": ["R08"] },
    { "phrase": "Plus d'une personne est venue.", "priorite": "P1", "teste": ["R08"] },
    { "phrase": "Qu'est-ce qui arrive ?", "priorite": "P1", "teste": ["R24"] },
    { "phrase": "Qu'est-ce que tu veux ?", "priorite": "P1", "teste": ["R24"] },
    { "phrase": "À quoi penses-tu ?", "priorite": "P1", "teste": ["R24", "R19"] },
    { "phrase": "La personne dont je parle.", "priorite": "P1", "teste": ["R19"] },
    { "phrase": "Je veux ne pas partir.", "priorite": "P0", "teste": ["R23"] },
    { "phrase": "Je ne veux pas partir.", "priorite": "P0", "teste": ["R23"] }
  ]
}
