OMEGA-Ω
OMEGA est un petit « cerveau » logiciel qui joue au pendu. Sa particularité : il a le droit de regarder les lettres déjà découvertes, jamais le mot caché. Il doit donc deviner comme un humain — en reconnaissant des mots vus, en « sonorisant » ce qu'il lit, en s'appuyant sur la forme des mots. Ce document explique comment il est bâti, ce qu'il sait faire (≈ 90 % de victoires sans tricher), ce qu'il ne sait pas encore faire, et comment s'en servir. Le bouton « En clair » en haut à gauche masque les tableaux techniques ; « Complet » montre tout.
F***) n'ont pas de bouton : elles sont signalées comme telles.0Méthodes & conventions
0.1 — Statut des affirmations
Chaque fait porteur est étiqueté. La valeur scientifique du projet tient à cette séparation stricte :
- mesuré résultat empirique reproductible (run headless apparié, graines fixées), source datée.
- design choix d'architecture acté, non rediscuté dans cette version.
- hypothèse interprétation ou conjecture non encore tranchée par la mesure.
- exclu volontairement hors de la chaîne de décision (triche grise ou béquille).
0.2 — Trois métriques, à ne pas confondre
| Métrique | Définition | Rôle |
|---|---|---|
| Victoires (winrate) | Fraction de parties gagnées. | Métrique finale — mais pas le juge de paix du projet. |
| Couverture | Fraction des positions correctement révélées avant la fin. | Plus fine, moins bruitée (une partie peut être perdue avec une couverture élevée). |
| OS_diss | Dissonance entre cercle direct et cercle miroir (RSA, 1−cosine). | Métrique structurelle prioritaire : l'objectif est l'auto-régulation. |
0.3 — Protocole de mesure
- Comparaisons seedées et appariées (mêmes mots, mêmes graines) ; conditions A/B/C/D.
- N typique : 150–2000 parties ; 8 graines appariées pour les deltas fins (statistique z).
- Parties chaînées, jamais reset entre jeux : l'apprentissage est inter-jeux (principe L04). Mesurer avec reset invalide tout mécanisme cumulatif mesuré (la mesure « 30 jeux × resets » avait faussé l'évaluation de
F177). - Inertie OFF : un toggle est proprement débranchable si, éteint, la sortie est byte-identique à la baseline.
0.4 — Avertissement de reproductibilité
Corrigé en phase46 (Fix#1) : le picker de mots et les helpers de banc passent désormais par omegaRand() seedé → mesures headless déterministes (répétables bit-à-bit). Il ne subsiste que le fallback intentionnel vers Math.random() quand aucune graine n'est posée (jeu interactif libre). Les chiffres « robustes » proviennent des protocoles headless appariés seedés.
0.5 — Note de version (à lire une fois)
phase47 ; socle phase45 ≈ 9 574 lignes) est le système décrit ici. Les bugs numérotés B1/B3 et la corrélation r=−0,153 viennent de v0.06 et ont motivé la refondation ; ils sont signalés comme hérités là où ils apparaissent.1Objet & cadre
OMEGA-Ω est une architecture cognitive jouant au pendu sur un substrat d'informatique hyperdimensionnelle (HDC). L'objectif n'est pas de maximiser les victoires mais de faire émerger la décision (le choix d'une lettre) à partir de mécanismes inspirés du cerveau.
design Distinction de catégorie (réf. interne F169) : un solveur maximise les victoires par tous les moyens (n-grammes, dictionnaire complet) ; une architecture cognitive jouant au pendu démontre l'apprentissage sous contraintes pauvres. OMEGA relève de la seconde. Selon F169, 30–40 % de victoires sans lexique seraient déjà un bon résultat (limite cognitive humaine sur la prédiction de mots).
2Présentation & performance
Application web autonome (un seul fichier HTML) embarquant le moteur cognitif, le dictionnaire français et le tableau de bord de mesure. La refonte v0.07 a été motivée par la séparation des substrats ortho/phon : leur contamination croisée faisait dégénérer les voies — une reproduction involontaire d'erreurs de dyslexie de surface (Plaut & Shallice 1993).
Deux voies de lecture (l'écrit et le son) reliées par un concept commun ; deux boucles par voie (une qui perçoit-décide, une « miroir » qui corrige-apprend, comme le sommeil consolide le jour) ; et un arbitre (OS) qui dose entre l'écrit et le son et empêche toute source de « tricher » en imposant la réponse.
2.1 — Performance : chiffres sourcés
Le taux dépend de la difficulté, de la configuration et de l'horizon. Toujours citer le régime.
| Régime | Victoires | Err. moy. | Couv. | Statut / source |
|---|---|---|---|---|
| Baseline fréquence pure | ~22–23 % | ~5,5 | — | mesuré declare e2e 31/05, 150+150 |
| Cheat-free début v7 (pendu durci) | ~2,6 % | — | ~45–50 % | mesuré Blueprint v7 §1.3, 02/05, 200 jeux chaînés |
| Cheat-free — config de référence (cognition) | ~90 % | ~2,5 | — | mesuré MESURE_FIX 31/05, headless apparié, A1/A2 OFF (89,5±2,6 / 90,6±2,9) |
| Cheat-free + declare NEO (R + Assemblé + Cohorte) | 97,5 / 98,8 % | — | — | mesuré NEO 03/06 (§17), 4 gr. × 120, K=1 / K=3 |
| + declare (confiance 0,85) | ~97,7 % | ~1,7 | — | mesuré idem 31/05 |
| Recall — mots déjà vus | 95,3 % | 1,33 | — | mesuré declare e2e, banc 400 |
| Mot jamais vu (décodage assemblé propre) | 54,7 % | 4,45 | — | mesuré idem |
| Config complète avec A2 exclu | ~95 % | — | — | mesuré REPRISE_MASTER — triche grise |
| Cohort-oracle (lexique complet = plafond A2) | 98,7 % / 100 % | ~1,1 | — | mesuré declare e2e 31/05 (vus / nouveaux) |
w.p légitime), 22 % en ortho seul. Repères Trexquant (lettre-seule, sans son) : ~50 % baseline, ~65-68 % bons solveurs. Lecture honnête : excellent in-lexique ; bon hors-lexique via le concept phon→ortho (au-dessus des bons solveurs, mais en entendant le mot) ; faible en ortho pur — la généralisation sous-lexicale OOV reste le point faible (couche morpho à venir).2.2 — Principes fondateurs (L01–L04)
- L01 — double Möbius design : deux cercles antagonistes (direct = perception→décision ; miroir = résultat→correction) reliés par l'OS.
- L02 — invariance fonctionnelle : concepts émergents au-dessus du substrat ; les 12 cellules-concept de M3_d sont apprises (Hebbian), non pré-câblées.
- L03 — OS gouverneur dialectique : maintient la tension entre les deux cercles sans en laisser un dominer (construction propre au projet ; voisins : GAN, RL adversarial).
- L04 — apprentissage inter-jeux : miroir et carte son↔lettre persistent entre parties ; pas de remise à zéro.
2.3 — Cascade d'apprentissage à 4 niveaux (F139)
- Brique phonétique (pré-câblée) : 14 traits articulatoires × 26 lettres + composante ortho HRR (0,85 / 0,15).
- Émergence d'un proto-langage : 5 sous-cerveaux de M1_d produisent du vocabulaire.
- Carte son↔lettre (
phonGraphMap[26][SDIM]) : apprise en jouant (observation + consolidation). - Pendu : banc d'essai ; décision = comparaison de l'état interne à la carte (et/ou softmax M5_d).
3La tâche : le pendu (spécification)
- Mots : longueur ≥ 7 lettres ; lexique 88 939 mots (Lexique 4, sous-ensemble ≥ 7, majusculé/désaccentué).
- Départ : 0 lettre révélée (pendu « durci »).
- Budget : 6 erreurs.
- Information légitime : lettres révélées, longueur, lettres essayées, connaissance acquise par expérience.
- Information illégitime : le mot caché — directement, ou par énumération du dictionnaire jusqu'au seul mot compatible.
Le pendu est choisi pour sa pauvreté en contexte : le joueur doit générer activement des hypothèses (comme « sonner » un mot inconnu). Banc d'essai exigeant et révélateur.
4Architecture
Deux colonnes parallèles, un pont conceptuel, un module d'arbitrage.
- Voie orthographique (
M*_d) : lettres révélées → trait → motif spatial → concept → candidats lexicaux → décision. - Voie phonologique (
M*_phon) : conversion en phonèmes SAMPA (distingue é/è/an/on…), seconde route de lecture (Coltheart 2001). - Hub M_S (concept partagé) : carrefour amodal, auto-encodage cross-modal (Rogers 2004 ; Patterson 2007) — entrer par une modalité, reconstruire les autres.
- OS — module d'arbitrage (L03) : combine ortho + phon via
w(r) = −r/(1+r)(r= force phon ÷ force ortho), tranche la lettre, dilue tout signal pré-imposant une réponse. PublieOS_diss,OS_lect,OS_mod,OS_speed.
w(r) design : la forme −r/(1+r) est un dosage choisi (monotone, borné) ; sa justification théorique précise n'est pas documentée dans les sources consultées — à traiter comme un paramètre de design, pas un résultat dérivé. mesuré L'apprentissage de θ=(α,β) (🧬 Train θ, panneau STATISTICS) converge vers α≈1,13, β≈0,65–0,72.4.1 — Couches structurantes
- Pipeline 0 (priors statistiques) : en v0.06, trois modules
M_E(mémoire épisodique),M_A(priors lettres + reward shaping),M_P(pattern matching). mesuré Absents du build v0.07 mais absorbés : priors → constanteLETTER_FREQ; pattern →A2/computeLex4LetterScores; épisodique ≈ la partie. v0.07 a consolidé, pas perdu. - Canaux typés : ~32 canaux (CONCEPT, VECTOR, EVENT, SCALAR) relient les modules ; certains liens inter-voies sont dormants.
- Substrats indépendants : ortho 26D (identité), phon 26D one-hot + 14D traits, hub HRR cross-modal — aucune chaîne de dérivation entre substrats (correctif clé v0.07).
- Boucle Möbius (P1/P2) design : circuit fermé conçu (P1 direct, P2 miroir, P1→P2→P1). Recevoir le mot en P2 est conforme au design (simulation, Hesslow 2002), l'OS gérant l'anti-triche. En pratique P2 et les modules miroir étendus sont débranchés (voir §12).
Schéma — deux voies, deux boucles, un arbitre
┌────────────────────────────┐
│ OS — module d'arbitrage │
│ combine ortho + phon │
│ w(r) = -r / (1 + r) │
└────────┬──────────┬─────────┘
décision ortho │ │ décision phon
────────────────────── │ │ ──────────────────────
VOIE ORTHO (M*_d) │ │ VOIE PHON (M*_phon)
ascendante↑ miroir↓ ascendante↑ miroir↓
M5_d ──► M5_m (reward) M5_phon ─► M5_phon_m (reward)
▲ │ ▲ │
M4_d ◄┄ croisement p ┄┄┄┄┄┄┄┄┄┄┄┄┄ M4_phon ─► M4_phon_m effectif
▲ (M4_PHON_USE_P) ▲ ┆
M3_d ◄─ écrit ─ M3_m (a-Hebb) M3_phon ┄► M3_phon_m observationnel
▲ (conceptCells) ▲
M2_d ──► M2_m M2_phon M2_phon_m absent
▲ │ ▲
M1_d ◄─ ≈0,1 ─ M1_m (letScore) M1_phon M1_phon_m absent
Miroir ortho = complet (5 étages) · miroir phon = tronqué (M5→M4 ; M3 obs ; M2/M1 absents).
5Modules M1–M5, boucles, constantes
5.1 — Les cinq étages
| Étage | Voie ortho (M*_d) | Voie phon (M*_phon) | Rôle |
|---|---|---|---|
| M1 | proto-langage, 5 sous-cerveaux (LDIM=512) | substrat articulatoire (40D) | perception brute + proto-vocabulaire |
| M2 | 16 zones dimensionnelles, filtrage « chapeau mexicain » | résonance (40D) | mise en forme spatiale |
| M3 | 12 cellules-concept apprises (SDIM=1024) | concept (1024D) | représentation conceptuelle (hub M_S) |
| M4 | candidats lexicaux top-10 (70 % sémantique + 30 % fréquence-lettre) | candidats SAMPA | mots/sons plausibles |
| M5 | décision softmax, température adaptative (26) | décision (26) | vote par lettre |
Précisions : les 16 zones de M2 sont dimensionnelles (compartiments du vecteur), non positionnelles. La température de M5 règle l'exploration (écart net → choix tranché ; écart faible → exploration).
5.2 — Deux boucles par voie
- Ascendante (M1→M5) : perçoit et décide ; ne lit le mot qu'aux positions révélées (cap §43) ; jamais d'accès aux lettres cachées.
- Descendante (miroir, M5→M1) : reçoit le résultat, ajuste les poids ; enseigne, ne décide pas.
Câblage du miroir. Ortho complet : M5_m (reward) → M4_m (letterPenalty) → M3_m (anti-Hebbian, écrit conceptCells) → M2_m (zonePenalty) → M1_m (letterScore). M3 partage ses poids (seul étage où le miroir écrit) ; M4/M2/M1 ont un état séparé réinjecté ; M1_m.letterScore peut co-décider M5 avec poids M5_D_M1_M_WEIGHT = 0,1 (F198), mais c'est désormais gardé par le toggle M5_D_M1_M_ENABLED = défaut OFF (décision 17/06, AUDIT_OMEGA §1.4.2 : M1_m ne gagne pas ses 0,1) → en baseline M1_m n'influence PAS la décision ; l'assert ne fige que le poids (0,1) si on le réactive. Périmés : « 0,0 baseline » ET « 0,1 sans toggle ». Phon tronqué : M5_phon→M4_phon effectif (lu par M4_phon ascendant), M3_phon_m observationnel, M2_phon_m/M1_phon_m construits + appelés mais sans consommateur (dormants — pas « jamais construits » ; cf. AUDIT_OMEGA §1.4/D1).
5.3 — Constantes principales
| Module | Constantes | Valeur |
|---|---|---|
| M1_d | sous-cerveaux ; phases ; dim | 5 ; [0,103,207,311,415] ; LDIM=512 |
| M2_d | zones ; grille ; EMA ; σ_exc/σ_inh/poids | 16 ; 4×4 ; 0,05 ; 1,5 / 4,0 / 0,5 |
| M3_d | cellules ; α_Hebb ; α_decay ; seuil ; dim | 12 ; 0,008 ; 0,001 ; 0,005 ; SDIM=1024 |
| M4_d | poids cosine/freq ; top-K | 0,7 / 0,3 ; 10 |
| M5_d | T_min/T_max ; facteur gap ; poids M1_m | 0,05 / 0,5 ; 20,0 ; 0,1 (F198) |
| M5_m | reward HIT/MISS/WIN/LOSE | +1,0 / −0,5 / +2,0 / −1,0 |
| M3_m | taux anti-Hebbian | 0,004 (½ du Hebbian direct) |
Le rapport α_Hebb/α_decay = 8 est une dette identifiée (norme non bornée, §12).
6Référence des interrupteurs (47)
47 flags au total (phase45) : 31 exposés comme boutons-bascule, plus des contrôles en panneaux dédiés (dictée, pont bind) et des flags JS de socle. Phase46 ajoute 6 bascules NEO + 4 paramètres → 37 toggles ; phase47 ajoute le mode M_TREXQUANT_MODE → 38 toggles (§17). MAJ 06/26 : +3 bascules cheat-free bleu (M_NEO_PHON_COHORT son board-dérivé · M_NEO_PHON_COHORT_JOINTE · M_NEO_OS_ARB arbitrage OS) → 41 toggles ; M_DECLARE_DUAL adopté (préset). Code couleur UI 4 catégories : vert config optimale · bleu cheat-free optionnel · orange lit le SON de currentWord (mot entendu) · rouge triche grise (A1/A2/A3). Détail des 3 nouveaux : §17.1. Défaut = état au chargement. « préset ✔ » = allumé par la config de référence (§8).
phase45. La colonne « Nom UI » donne le libellé exact du bouton et son panneau. 31 bascules sont des boutons (panneaux Toggles · Phase A + B2 et Débranchable · triche grise) ; les contrôles dictée/bind vivent dans des panneaux dédiés ; le reste est en flags JS de socle. Au démarrage, toutes les bascules sont OFF sauf M4_PHON_USE_P (« φ · Croisement p ») = ON. La mention « préset ✔ » marque celles que la config de référence (§8) allume. Build phase46/47 : 6 bascules NEO + le mode 🎯 Trexquant ajoutés (38 toggles au total) — voir §17.| Code (toggle) | Nom UI · panneau | Défaut (boot) | Statut | Rôle / effet mesuré |
|---|---|---|---|---|
L01_A1_M2_ORTHO | « A1 · Orthography » · Débranchable·triche grise | OFF | exclu | Perception orthographique (M2) : lit les lettres révélées (épellation). Socle ortho legacy. Participe au chemin de fréquence brute. |
L01_A2_M4_LEX4 | « A2 · Lexique 4 » · Débranchable·triche grise | OFF | triche grise | Filtre dictionnaire + score lettre par fréquence du cohort. « Le levier qui connaît le français ». Plafond ~95–98,7 % mais lookup lexical (voir §7). Autorisé seulement pour déclarer. |
L01_A3_M5M_WORDLEX4 | « A3 · Word Lex4 » · Débranchable·triche grise | OFF | exclu | Réinjecte le mot entier (Lex4) dans la correction descendante (M5_m). Béquille-oracle. |
L01_A4_M4M_DECOMP | « A4 · Decomp » · Toggles·Phase A+B2 | OFF · préset ✔ | actif | Décomposition descendante (M4_m) : convertit le signal-mot en pénalités par lettre. |
L01_A5_M2M_POSITIONAL | « A5 · Positional » · Toggles | OFF · préset ✔ | actif | Correction positionnelle descendante (M2_m) : pondère quelles positions comptent. |
L01_A6_OS_CONCEPT_ARBITRAGE | « A6 · OS Arbitrage » · Toggles | OFF · préset ✔ | actif | L'OS arbitre entre signaux conceptuels des voies pour trancher la lettre. |
L01_B2_MOBIUS | « B2 · Möbius » · Toggles | OFF | à mesurer | Couplage croisé ortho↔phon (torsion de Möbius). Effet pur non validé (R66). |
M_VOIE_PHON | « φ · Voie Phon » · Toggles | OFF · préset ✔ | actif | Voie phonologique : convertit le mot en sons (SAMPA), raisonne en parallèle de l'ortho (double voie, Coltheart). |
M_OS_V07 | « φ · OS v07 » · Toggles | OFF · préset ✔ | actif | Laisse l'OS v07 combiner ortho+phon et piloter la décision. OFF : la phon tourne en observation seule. |
M4_PHON_USE_P | « φ · Croisement p » · Toggles | ON · préset ✔ | actif | Croisement : M4_phon mélange un prior de la phonétique réelle (champ p/SAMPA, du cohort). Seul toggle ON au boot. |
M_SUBSTRAT_ORTHO_PURE | « φ · Substrat pur » · Toggles | OFF · préset ✔ | actif | Substrat orthographique pur (anti-contamination). OFF = identique au socle legacy. |
M_PHON_FEEDBACK | « φ · Feedback ↓ » · Toggles | OFF · préset ✔ | actif | Retour descendant phon (Phase 3.6 B) : pénalité M4 effective, M3 observationnel. |
M_WORD_DECLARE | « 🎯 Declare mot » · Toggles | OFF | mesuré | Déclare le mot quand motif + ratés ne laissent qu'UN candidat (cheat-free). Champ CONF : 1.0 = 100 % sûr ; ~0,70 = sweet spot. |
M_IG_SELECT | « 🧠 InfoGain » · Toggles | OFF | à mesurer | Favorise la lettre la plus discriminante (entropie, Lindley 1956). Champ W = poids. IG pur sur-explore. |
M_IG_PSUCCESS | « IG x P(succes) » · Toggles | OFF | à mesurer | Requiert InfoGain ON. Pondère le gain d'info par P(présence) — évite de cramer une vie sur une lettre rare (J/Y). |
M_BPC_M3D | « bPC M3_d » · Toggles | OFF · préset ✔ | actif | Auto-encodeur compétitif du concept (encodeur W depuis M1, décodeur tied, reconstruction). Sortie découplée du scoring-lettre. Winrate non régressé (99,25 %). |
M_BPC_READOUT_COUPLE | « Couplage readout » · Toggles | OFF · préset ✔ | actif | Injecte le score-lettre appris du concept (R, par récompense). +2 à +3 pts en config dépouillée ; nuit en config pleine (A2 redondant). Requiert bPC M3_d. |
M_PHON_READOUT_COUPLE | « Couplage readout φ » · Toggles | OFF · préset ✔ | actif | Pendant phon (R_phon), parité avec le couplage ortho. Requiert la voie phon. |
M_PHON_CONCEPT_BIND | « Concept lié φ (étape 2) » · Toggles | OFF · préset ✔ | mesuré : nul | Le readout phon lit un concept lié (positions liées par permutation) vs mélange : ≈ mélange (z ≈ −0,95). Buffer séparé, M_S intact. |
M_BPC_DECLARE | « 🎯 Declare BPC » · Toggles | OFF | mesuré | Déclare un mot quand le concept M3_d le pointe (cheat-free via M1_d). +5,42 pts moyen multi-seed ; 97,25 % vs 94,31 % long horizon. Requiert bPC M3_d. |
M_DECLARE_DUAL | « 🦴 Declare DUAL (cheat-free) » · Toggles vert/préset | OFF · préset ✔ | adopté 06/26 | Déclare via le board-buffer (coups publics), jamais currentWord. Cohort board, fusion freq × ortho-bigramme × phon-g2p (modèle de mot naïf-Bayes, pas le croisement per-lettre). ADOPTÉ dans la config cheat-free (§17.5) : +1,8 → 99,8 % (mot entendu) / +2,5 → 97,3 % (sans currentWord), 4 graines, jamais en-dessous ; reconnaissance in-lexique (neutre OOV). (Ancienne mesure cognition : +5 pts 93,7→98,7 %.) |
M_LEARN_FROM_COGNITION | « 🧠 Apprendre depuis la cognition » · Toggles | OFF | mesuré | Anti-béquille : quand un declare force une lettre, les apprenants apprennent de la lettre cognitive (pré-override). Restaure ~2× le signal θ (0,010→0,021). |
M_OS_LEARNING | « θ · Apprentissage » · Toggles | OFF · préset ✔ | actif | Interrupteur maître : autorise l'OS à apprendre θ=(α,β). Active les boutons 🧬 Train θ / 📈 Sweep β. |
M_OS_LEARNING_GUARD_1_BOUNDED | « θ · Garde 1 borné » · Toggles | OFF · préset ✔ | design | Contraint θ à une famille paramétrique bornée. |
M_OS_LEARNING_GUARD_2_ANALYTIC_AUDIT | « θ · Garde 2 audit » · Toggles | OFF · préset ✔ | design | Alerte si θ appris s'éloigne de θ analytique (lecture seule). |
M_OS_LEARNING_GUARD_3_MDL_REGUL | « θ · Garde 3 MDL » · Toggles | OFF · préset ✔ | design | Régularisation de parcimonie (Occam/MDL). |
M_OS_LEARNING_GUARD_4_COHERENCE | « θ · Garde 4 cohérence » · Toggles | OFF · préset ✔ | design | Refuse une MAJ qui monte le winrate mais baisse la cohérence interne. |
M_OS_LEARNING_ONLINE | « θ · Apprentissage EN LIGNE (SPSA) » · Toggles | OFF | à mesurer | SPSA en ligne, par partie, sans rejeu. Lit W/c/η, respecte les 4 gardes. Séparé du batch Train θ. |
M_EMERGENT_DECLARE | « 🦴 Declare émergent · recall » · Toggles | OFF | mesuré | Reconnaît un mot déjà joué (bind du board révélé vs banc). 95,3 % vus / 1,33 err. 100 % cheat-free. |
M_EMERGENT_ASSEMBLED | « 🧬 Declare émergent · phon→ortho » · Toggles | OFF | exclu au pendu | Décodage assemblé : sur position sonore, force le graphe si conf>0,75. 54,7 % mot nouveau (généralisation). Variante raccourci = oracle (§9). |
M_EMERGENT_G2P_ONLINE | « 🔤 g2p appris en jouant (online) » · Toggles | OFF | mesuré | Table phonème→graphe (EM) apprise des seuls mots joués, post-partie. Doctrinalement propre. Plafond batch vers ~900 parties. |
M_DICTEE_LEXICAL | « Dictée d'un mot aléatoire » · panneau Route sublexicale | OFF | oracle | Mode dictée lexicale (lookup, ~92 % connus / 0 % nouveaux = signature mémoire). Pas un bouton-bascule. |
M_DICTEE_SUBLEXICAL | « Dictée sublexicale d'un mot » · panneau Route sublexicale | OFF | à mesurer | Dictée sublexicale (EM, cognition apprise). Bouton dédié. |
M_PHON_BIND | panneau Pont bind · « Mesurer (bind vs mélange) » | OFF | à mesurer | Liaison HRR phon. Contrôle de mesure (1024-D), pas un bouton-bascule. |
M_PHON_BINDCOND | panneau Pont bind | OFF | à mesurer | Liaison phon conditionnée (revealed-aware). |
M_PHON_READOUT_AB | panneau Pont bind / readout | OFF | à mesurer | Comparaison readout phon A/B. |
M_S_ENABLED | JS-seul (socle) | ON | socle actif | Hub transmodal M_S — l'une des sources du winrate. |
M5_D_PHONGRAPH_ENABLED | JS-seul (socle) | ON | socle actif | phonGraphMap co-décideur en M5 — source du winrate. |
F75_DAMASIO_ENABLED | JS-seul (socle) | ON | socle actif | Marqueur somatique (biais reward, Damasio). |
E_DEDOUBLE_ENABLED | JS-seul (socle) | ON | socle actif | Service E dédoublé (observation/consolidation). |
M4_M_CONTEXTUAL_ENABLED | JS-seul (socle) | ON | socle actif | Pénalité lettre contextuelle (miroir). |
M4_M_HOMEO_V2_ENABLED | JS-seul (socle) | ON | socle actif | Homéostasie v2 de letterPenalty. |
M4_M_OS_MOD_ENABLED | JS-seul (socle) | ON | socle actif | Modulation OS de la pénalité lettre. |
OS_GAP_RELATIVE_ENABLED | JS-seul (socle) | ON | socle actif | Gap relatif pour la température M5. |
OS_SLEEP_DECAY_ENABLED | JS-seul (socle) | ON | socle actif | Decay au « sommeil ». |
M_S_DUAL_ENABLED | JS-seul | OFF | à mesurer | Hub dual ortho/phon. Fort couplage. |
M5_D_POSITION_AWARE_ENABLED | JS-seul | OFF | à mesurer | Décision sensible à la position. |
PUBSUB_ENABLED | JS-seul | OFF | à mesurer | Bus pub/sub inter-modules (R39 indépendance). |
SLEEP_REPLAY_ENABLED | JS-seul | OFF | à mesurer | Rejeu au sommeil. |
M_HRR_CROSSMODAL_ENABLED | JS-seul | OFF | à mesurer | HRR cross-modal. |
M_BPC_CROSSMODAL_ENABLED | JS-seul | OFF | à mesurer | bPC cross-modal. |
COUCHE_A_ADAPTIVE_ENABLED | JS-seul | OFF | à mesurer | Couche A adaptative. |
COUCHE_BC_SEPARATION_ENABLED | JS-seul | OFF | à mesurer | Séparation couches B/C. Fort couplage. |
Note. Au démarrage, seul M4_PHON_USE_P (« φ · Croisement p ») est ON ; la config de référence (§8) allume ensuite les bascules « préset ✔ ». Les bascules très couplées (M_VOIE_PHON, M_OS_V07, M_BPC_M3D) touchent de nombreux points du code — leur effet n'est pas local.
7Dossier Lexique 4 — l'interrupteur A2
A2 laisserait OMEGA consulter le dictionnaire entier pour deviner. Il gagnerait plus (~95–99 %), mais ce ne serait plus deviner : ce serait chercher la réponse. Tout l'intérêt du projet étant de penser sans dictionnaire, A2 est banni du choix des lettres — toléré uniquement pour annoncer un mot.
7.1 — Ce qu'est A2
L01_A2_M4_LEX4 (L01 ENH.) opère dans M4_ortho. À partir du cohort (mots du dictionnaire compatibles avec le motif + exclusions), il note chaque lettre par sa fréquence parmi les candidats et injecte ce score dans le scoring-lettre — l'estimateur P(lettre ∈ mot | board), pondéré fréquence. Modèle de référence : le cohort model (Marslen-Wilson & Welsh 1978).
7.2 — Statistiques
| Mesure | Valeur | Source |
|---|---|---|
| Plafond cohort-oracle, mots vus | 98,7 % / 1,11 err | declare e2e 31/05 |
| Plafond cohort-oracle, mots nouveaux | 100 % / 1,14 err | idem |
| Corrélation Cobweb ↔ A2-présence | 0,845 (vs IG 0,610) | REPRISE_MASTER 25/05 |
| Effet d'A2 sur le couplage bPC | rend le couplage −1 à −1,2 pt (redondant) | REPRISE_MASTER 27/05 |
7.3 — Pourquoi A2 est exclu du scoring
A2 atteint ~98,7 % (vus) / 100 % (nouveaux) parce qu'il a tout le lexique : un mot « nouveau » ne l'est jamais pour lui (son cohort contient toujours le vrai mot et converge dessus). C'est le raccourci-oracle qu'OMEGA refuse. Sa redondance est mesurée (absorbe Cobweb, corr 0,845 ; rend le couplage bPC contre-productif). Il porte le 95 % de la config complète sans cognition.
7.4 — Ce qui est autorisé à la place
A2 reste utilisable uniquement pour DECLARE (proposer un mot, en « professeur »), jamais comme moteur de scoring-lettre. L'équivalent cheat-free est M_DECLARE_DUAL (cohort du board, pas du dictionnaire complet) : +5 pts en config cognition, sans lire le dictionnaire au-delà du compatible-board.
8Mode d'emploi
8.1 — Lancer
- Ouvrir
OMEGA_v0_07_phase47…htmldans n'importe quel navigateur : application monolithique autonome (code + lexique inlinés). Aucun serveur, aucune dépendance. - Freeze de secours
OMEGA_v0_07_base.html: état stable pour rollback — ne pas le toucher. - Règle d'or : la console du navigateur est en lecture seule. Toute action passe par un bouton/toggle UI — jamais une commande qui modifierait l'état (reproductibilité).
8.2 — Les panneaux de l'interface
| Panneau | Boutons / champs | Usage |
|---|---|---|
| PENDU · Partie | ▶ Start · +1 Tick · ▶▶ Auto · Abort | Jouer : mot aléatoire, un coup à la fois (observer), partie complète, interrompre. |
| État Modules (Cercle Direct / Cercle Miroir) | vecteurs, normes internes | Diagnostic de la santé des représentations (substrat, dissonance D↔M). |
| Toggles · Phase A + B2 | les 28 bascules de configuration (§6) | Composer la configuration cognitive (A4…θ, voie phon, bPC, declare…). |
| Débranchable · triche grise | A1 · Orthography · A2 · Lexique 4 · A3 · Word Lex4 | Les béquilles lexicales, isolées. OFF en config de référence. |
| Performance Live + bPC santé | 📊 Mesure (Mesurer A/B) · 🔬 Drivers · 🧬 Train θ · 📈 Sweep β · 🌊 θ online JSON · 🧹 Reset · Exporter JSON | Protocole seedé A/B + export ; paramètres OS ; santé des 12 cellules-concept. |
| Bench (panneau perf) | ▶ Bench R1 · Bench tick réel · 🎯 Trexquant (hors-lexique) | Mode Trexquant — deux formes. (a) Jouable : la bascule 🎯 Mode Trexquant (groupe NEO) retire le mot tiré du len_index à chaque Nouvelle partie (cohorte/recall aveugles) → on regarde OMEGA résoudre du vrai hors-lexique ; lexique restauré au tour suivant. (b) Bench : le bouton 🎯 Trexquant joue 80 mots hors-lexique (warmup 300) et logue 2 winrates — phon→ortho cascade (avec son) vs ortho seul. Tous deux self-contained (restaurent le lexique). |
| Route sublexicale · cognition apprise | Dictée d'un mot aléatoire · Dictée sublexicale d'un mot | Mode dictée séparé (la version lexicale est triche grise). |
| Pont bind · mesure (1024-D) | Mesurer (bind vs mélange) | Compare concept lié vs mélangé (z), buffer séparé — n'affecte pas la baseline. |
| Développeur / monitoring | Smoke load · Smoke runtime (100 ticks) · Bench · Dump 14 canaux · Dump inventaire global · initOmegaGlobals() | Non-régression, débit, inspection des canaux/état. |
8.3 — Configuration de référence (cognition cheat-free) — MAJ 14/06/2026
Preset optimal re-mesuré sur le code courant, à activer dans L01 ENHANCEMENTS + Declare NEO :
ON (cognition) : A4, A5, A6, M_VOIE_PHON, M_OS_V07, M4_PHON_USE_P,
M_SUBSTRAT_ORTHO_PURE, M_PHON_FEEDBACK, M_BPC_M3D,
M_BPC_READOUT_COUPLE, M_PHON_READOUT_COUPLE, M_PHON_CONCEPT_BIND,
M_OS_LEARNING (+ ses 4 gardes) [M_OS_LEARNING_ONLINE OFF : mesuré sans gain + dérive]
ON (declare NEO) : M_DECLARE_NEO, M_NEO_RECALL, M_NEO_ASSEMBLED,
M_NEO_COHORT, M_NEO_G2P_EXP (pén 0,5), M_DECLARE_DUAL (adopté 06/26) (muette/trigger OFF ; NEO_CONF 0,75, RECALL_MARGIN 0,20)
OPTION cheat-free SANS currentWord (bleu) : + M_NEO_PHON_COHORT + M_NEO_PHON_COHORT_JOINTE → ~97,3 % (vs 97,5 % « mot entendu »)
OFF : A1, A2, A3 (triche grise / béquille)
À MESURER : L01_B2_MOBIUS, M_IG_SELECT, M_IG_PSUCCESS ; M_NEO_OS_ARB (alternative propre à DUAL, ≈ mais ne bat pas)
Win rate mesuré (in-lexique, graine 12345, 120 mots, warmup 150) : cognition seule (base) 91,46 % (K=1) / 93,75 % (K=3) → +NEO (R+A+Cohorte) : 97,50 % (K=1) / 98,82 % (K=3) (4 graines × 120, harnais déterministe ; cf. notes NEO + §17). Cheat-free, niveau declare manuel.
currentWord (« mot entendu » : assemblé NEO si cohorte OFF, + assemblé émergent) · rouge = triche grise dico (A1/A2/A3, ne pas activer). L'assemblé NEO bascule orange→vert dès que le bleu « son board-dérivé » est ON (il ne lit plus le son du mot).learnExp vs learn), avec une pénalité bornée (0,5) sur les lettres fausses essayées. Falsification mesurée : ancien g2p 98,9 % · révélé-seul sans pénalité 98,3 % · révélé-seul + pénalité 0,5 = 98,9 % (= ancien). L'ancien ne trichait pas de façon mesurable, mais le nouveau est doctrinalement plus propre (n'absorbe pas l'orthographe entière) sans coût → adopté dans la config de référence.L'application démarre tous interrupteurs OFF (≈ 2,6 % si on lance tel quel) : il faut activer la config ci-dessous. A1 · A2 · A3 restent ÉTEINTS — c'est précisément ce qui rend le jeu cheat-free : aucun lookup dans le dictionnaire pour choisir une lettre.
- Cognition : A4 · A5 · A6 · φ Voie Phon · φ OS v07 · φ Croisement p · φ Substrat pur · φ Feedback ↓ · bPC M3_d · Couplage readout · Couplage readout φ · θ Apprentissage + ses 4 gardes.
- Déclaration cheat-free : 🦴 Declare DUAL · 🧩 Declare NEO (maître) · 🔁 recall · 🧬 assemblé · 🎯 cohorte · 🧪 g2p révélé (pén 0,5).
- Cheat-free intégral (sans
currentWord) : 🔊 son board-dérivé (0,5) · 🔗 jointe son×ortho (0,3) — le son vient du consensus de la cohorte board, plus aucune lecture du son du mot caché.
Résultat mesuré (in-lexique K=1, 4 graines, harnais déterministe) : ≈ 97,3 % cheat-free intégral (ne lit jamais currentWord). Repères : ≈ 97,5 % si l'assemblé lit le son du mot (prémisse « mot entendu », légitime en dictée), jusqu'à 99,8 % avec DUAL ; plafond oracle (lookup lexical, exclu par doctrine) 98,7 %. Les options 🔇 muette · 🎚️ trigger · 🧭 arbitrage OS sont mesurées neutres (ne changent pas le résultat) — à laisser au choix.
8.4 — Procédure de mesure (réplicable)
- Appliquer le preset, fixer la graine.
- +1 Tick pour comprendre un coup ; Auto pour une partie ; ne pas conclure de performance depuis l'interactif.
- Mesure : protocole seedé, parties chaînées (jamais reset entre jeux — L04), N ≥ 150 (≥ 2000 pour la dérive longue), 8 graines pour les deltas fins.
- Lire couverture et OS_diss autant que les victoires.
- Vérifier l'inertie OFF d'un nouveau toggle (sortie byte-identique) avant de juger son apport.
- Exporter le JSON ; comparer A/B avec z.
8.5 — Discipline de travail
- Éditions sur extraction jetable (
/tmp/_c.js) ; le build sauvegardé n'est jamais touché tant qu'une brique n'est pas validée. - Save = ZIP, sur ordre explicite seulement ; une seule à la fois.
- OFF inerte : toute brique ajoutée laisse la baseline byte-identique éteinte.
- Vérifier la doctrine déjà accumulée avant d'investiguer (on a perdu du temps à redécouvrir des constats documentés).
9Cadre anti-triche
- Légitime : lettres révélées, longueur, lettres essayées, tout ce qui s'apprend en jouant (banc de mots vus, tables son↔lettre).
- Triche grise : énumérer le dictionnaire complet pour isoler le mot (A2, cohort lexical complet). Toléré seulement pour déclarer.
mesuré Voie phon + bPC M3_d + émergent + g2p, SEULS = <60 %. Couplé à « phon scramblée → taux inchangé », cela prouve qu'aucune route isolée ne pilote la décision. Le winrate (~90 %) est émergent de l'architecture entière (M4_d natif + hub M_S + M_P + readouts + OS + cascade miroir + M1_m co-décideur) — modèle hub-and-spoke / Triangle.
L'anti-triche n'interdit pas l'information : il tient par le cloisonnement des boucles — la montante décide (sur le révélé seul), la descendante apprend (le « professeur » a le droit de voir le mot, façon wake-sleep) — plus la dilution par l'OS, qui neutralise tout signal voulant pré-piloter.
9.1 — Le cas const ph = G.wp.get(currentWord)
Lit la phonologie du mot-cible = lookup clé→réponse. Son statut dépend de deux facteurs : (1) régime — au pendu (board-only) le mot n'est pas « entendu » → triche dure ; en dictée le mot est l'entrée → légitime ; (2) destination — confiné à P2/apprentissage fin-de-partie/dictée → toléré ; redescendu dans M4_d/M5_d → triche dure. Test « phon brouillée → taux inchangé » : actuellement oracle latent non exploité. Règle : ne jamais câbler dans le scoring du pendu ; pour une voie phon cheat-free, dériver ph du cohort (au prix des ~78 %).
9.2 — Procédure d'audit de triche (réutilisable)
Pour tester si une source X est exploitée par le scoring : brouiller/neutraliser X et mesurer Δ(taux). Si Δ ≈ 0, X n'est pas exploité (oracle latent toléré) ; si Δ < 0 significatif, X tire la décision (à couper si X est un oracle). Juger une brique dans le système complet (ablation), jamais en override isolé.
10Régimes de fonctionnement
Chaque mécanisme domine dans le régime qui lui fournit son entrée.
- Contexte pauvre (pendu, mot isolé) : la forme prime → phon→ortho et recall dominent. Levier des derniers points = recall (reconnaître), pas la grammaire.
- Contexte riche (texte suivi) : la grammaire domine (~92 %) ; le résidu (finales muettes) se lève par la catégorie grammaticale (POS) — sur le
-entmuet, l'incertitude chute de 0,93 à 0,019 bit (−98 %, mesure type AQUA). - Dictée (mot entendu) : la phonologie est une entrée légitime ; phonèmes + grammaire dépassent la forme seule.
Conséquence : au pendu mono-mot, 100 % sur un mot jamais vu est impossible cheat-free — c'est la définition même de cognition vs oracle.
11Résultats : réussite & échec
11.1 — Réussite
- Thèse d'intégration confirmée mesuré : fréquence pure ~22–23 % → config de référence cheat-free ~90 % sur la même tâche durcie. Aucune route isolée ne porte ce score (briques < ensemble ; phon brouillée → taux inchangé).
- Recall (mots vus) : 95,3 % / 1,33 err, à ~3 pts de l'oracle (98,7 %) — la reconnaissance VSA approche la couverture lexicale complète sans lire le dictionnaire.
- Généralisation (mots nouveaux) : 54,7 % / 4,45 err par décodage assemblé phon→ortho, sans aucune reconnaissance — honnête, comme un humain devant un mot inconnu.
- Effet du fix d'apprentissage (
M_LEARN_FROM_COGNITION, 8 graines) : cible erronée phon 20 %→0 % ; cascade miroir MISS-frac 71 %→80 % du niveau sain (z=14,6).
11.2 — Échec
- Profil des défaites (dyslexie phon) mesuré : sur 100 défaites, 96 % comportent une paire phonétiquement proche. Distance 0 (homophones I/Y) 5,8 % ; distance 1 (voisée/sourde P/B, T/D, K/G, F/V, S/Z) 58,3 % ; distance 2 29,2 % ; distance 3+ 6,7 %. Cause : les paires voisée/sourde partagent 13/14 traits → vecteurs quasi-identiques.
- Plafond miroir structurel : l'apport de la cascade est bridé par
(1−winRate); à ~97 % l'amountFactortombe à ~26 % (designF178, pas un bug). - Qualité pondérée plafonnée ~0,80 (max 0,84 OFF / 0,88 ON) vs cible 0,90.
- phonGraph inerte : ‖Δ‖ ≈ 0 (apprentissage par signe → moyenne nulle ; cos ≥ 0,997 vs substrat).
11.3 — Bilan honnête
La cognition cheat-free atteint ~90 % et s'approche de l'oracle sur le vu, mais : (a) elle plafonne sous l'oracle sur le nouveau (attendu) ; (b) les défaites résiduelles sont dominées par la confusion phon voisée/sourde non résolue ; (c) les cellules-concept M3_d (forme) sont faiblement connectées au hub (M3_d.output=0 sous bPC) — mais son readout-récompense cLetterScore est un contributeur cheat-free mesuré +3,4 (§12 ; AUDIT_OMEGA §3.1) : « M3_d faiblement connecté » ne vaut que pour les cellules/hub, pas le readout.
12État & limites
Hiérarchisé par impact × effort, chaque point formulé comme expérience falsifiable. Aucun ne dégrade la baseline (tout est éteint/découplé, byte-identique au repos).
| Point | Impact | Effort | Expérience falsifiable |
|---|---|---|---|
| Cellules M3_d faiblement connectées — le readout, lui, compte (héritée v0.06 : corr game↔winrate ≈ −0,15 ; v0.07 : 7-9 cellules/12, 1 concept plural, projection M2→M3 = permutation, pas vraie compression HRR ; cellules = code de forme) | Faible* | Faible | FAIT (17/06) : A/B M_BPC_READOUT_COUPLE → le readout cLetterScore compte = +3,4 cheat-free (8 graines, jamais sous ; AUDIT_OMEGA §3.1). Restent faibles = les cellules (forme/hub) ; débugger les internes = optionnel (le readout porte déjà la valeur). |
| Dyslexie phon (96 % des défaites, paires voisée/sourde) | Élevé | Moyen | Activer M_PHON_CORRECTION (α=0,10 / β=0,05) à grande échelle ; mesurer la baisse des défaites dist≤2. |
| Voie phon tronquée (M2_phon_m/M1_phon_m absents) | Élevé | Élevé | Construire les miroirs manquants (codage prédictif) ; mesurer l'apport phon. |
| B1 — M3_d.output non normalisé (héritée v0.06 : norme ~1,76, sature M_S ~1,46 ; inerte tant que bPC met output=0) | Moyen | Faible | B1 reste inerte (output=0 sous bPC) ; la reconnexion qui l'aurait activé est falsifiée (mur de capacité 12 cellules — la familiarité vit dans le banc). Sans urgence. |
| Hebbian non borné (α_Hebb/α_decay = 8) | Moyen | Faible | Borner ; mesurer la stabilité de la norme sur 2000 parties. |
B3 — score k/essais faux sur défaite (héritée v0.06) | Moyen | Faible | Corriger la formule ; revérifier les scores de parties perdues. |
| LDIM→SDIM bijective (gain d'info nul, R42-#9) | Moyen | Moyen | Random projection (Achlioptas 2003) vs retrait ; mesurer le gain d'info. |
Reproductibilité (Math.random non seedé) corrigé phase46 | Transversal | résolu | Fix#1 : picker + banc → omegaRand() (headless déterministe). Reste seul le fallback intentionnel si non seedé. |
| Biais de centre (grille Mexican-hat M2) | Faible | Moyen | Symétriser/normaliser la grille. |
P2/Möbius débranché (nom PIPELINE2_MVP trompeur) | Faible | Élevé | Brancher P2 progressivement ; vérifier l'inertie OFF puis l'apport. |
AUDIT_OMEGA §3/§3.1). Le concept (12 cellules) = un latent de forme dont la contribution réelle est le readout-récompense cLetterScore (couplé 0,20) : mesuré +3,4 pts de winrate en cheat-free (sans A2 ; A/B 8 graines, jamais sous zéro ; reproduit le « +2 à +3 dépouillé »). Il n'est redondant/nuisible qu'AVEC A2 (oracle lexical exclu par doctrine) — d'où l'ancien « contribution plate », mesuré en config pleine. Reste falsifié (périmètre borné) : loger le banc épisodique dans M3_d / chemin concept→M4 (−1,3 à −2,0, M3D_reconnexion_banc_FALSIFIE) et la familiarité (AUC 0,64 K=12 → vit dans le banc ; épisodique et concept séparés à dessein). Les cellules codent la forme (réutilisable côté dictée — signal de stade précoce, §0).Ordre recommandé : (1) purger fait (phase46 · Fix#1) ; (2) Math.random hors-seed fait — voie assemblée NEO/émergente, L2 apprise board-dérivé (§17) ; (3) PHON_TO_LETTERS codée-main → table L2 appriseloger le banc recall dans M3_d falsifié — mesuré net-négatif (concept→M4 contamine, −1,3 à −2,0) ; sonde capacité : porter la familiarité exige K≈N cellules (= le banc), 12 cellules AUC 0,64 vs banc 0,98 → la familiarité vit dans le banc, M3_d reste le petit latent sémantique (§17) ; (4) borner Hebbian + corriger la projection bijective à faire.
13Questions de recherche ouvertes
- θ → (α=1, β=1) ? L'OS, en apprenant seul (🧬 Train θ), retombe-t-il sur le dosage analytique ?
- Rapport des voies r ≈ 5,35 ? Le rapport
signal_phon / signal_ortho(≥ 1000 parties) approche-t-il 5,353 ? - Fraction de canaux dormants ≈ 0,079 ?
- Asymétrie ortho/phon : intrinsèque ou apprise ? Une init symétrique diverge-t-elle spontanément ?
Pour devenir scientifique, chaque correspondance devrait s'accompagner d'un mécanisme qui prédit la constante depuis le dispositif cognitif — à défaut, le résultat reste une analogie.
14Références
Statut : structurant/actif · présent mais inactif · non implémenté.
Lecture à deux voies & dyslexies — Coltheart et al. (2001) DRC (structurant) ; Plaut & Shallice (1993) ; Castles & Coltheart (1993), Adlard & Hazan (1998) confusions voisée/sourde (validées : 96 % des défaites).
Triangle & hub-and-spoke — Seidenberg & McClelland (1989), Plaut et al. (1996), Harm & Seidenberg (2004) ; Rogers et al. (2004), Patterson (2007), Lambon Ralph et al. (2017). Structurant (M_S).
Boucles, prédiction, miroir — Hinton et al. (1995) wake-sleep ; Bogacz (2025) codage prédictif ; Hesslow (2002) simulation (P2) ; Hong & Friston (2021) DMN/TPN.
Apprentissage / plasticité — Hebb (1949) ; DeSieno (1988) ; Bardes, Ponce & LeCun (2022) VICReg ; Turrigiano (1998, 2008), Zenke (2013) ; Moraitis et al. (2021) SoftHebb.
Décision / information — Lindley (1956) InfoGain ; Fisher (1987) Cobweb ; Sutton & Barto (1998) ; Friston (2025) Active Inference (inactif) ; Dehaene (1998)/Baars (1988) GNW (inactif).
Cohort / lecture en contexte — Marslen-Wilson & Welsh (1978) cohort model (base d'A2) ; Hale (2001), Levy (2008), Smith & Levy (2013) surprisal ; Jacobs & al. (1991) Mixture-of-Experts.
Représentation vectorielle — Plate (1995) HRR (SDIM=1024) ; Rachkovskij & Kleyko (2022) ; Achlioptas (2003) random projection (non implémenté) ; Schmidhuber (2003) OOPS (inactif).
Similarité — Kriegeskorte (2008) RSA (mesure de dissonance interne 1−cosine).
15Glossaire
| Terme | Définition |
|---|---|
| Ortho / phon | Forme écrite / sonore d'un mot. |
| SAMPA | Notation des phonèmes (distingue é/è/an/on…). |
| Concept / hub M_S | Représentation amodale reliant les voies (entrer par une, reconstruire les autres). |
| bPC | Auto-encodeur prédictif du concept (M_BPC_M3D). |
| Boucle ascendante / descendante (miroir) | Perception-décision / correction-apprentissage. |
| P1 / P2 | Cercle direct / miroir (double Möbius). P2 actuellement débranché. |
| OS | Module d'arbitrage (dose ortho/phon, dilue, mesure la dissonance). |
| Cohort | Mots du dictionnaire compatibles avec le board. |
| Couverture | Fraction des positions correctement révélées. |
| Declare | Override : annoncer un mot/une lettre. |
| Recall | Reconnaissance d'un mot déjà joué. |
| Cheat-free | Ne consulte jamais la réponse cachée. |
| Triche grise | Injection de la fréquence/orthographe du dictionnaire dans le score-lettre (A1/A2). |
| Oracle / lookup clé→réponse | Lecture de la réponse cachée (wp.get(currentWord)). |
| HDC / HRR | Informatique hyperdimensionnelle / Holographic Reduced Representations. |
| Cap §43 / R66 | Ne lire que le révélé / aucune activation par défaut sans validation empirique. |
16Annexes
16.1 — Table d'ablation (effets mesurés)
| Toggle / fix (nom UI) | Effet mesuré | N / graines | Config | Source |
|---|---|---|---|---|
M_BPC_READOUT_COUPLE Couplage readout | +1,8 à +4,2 pts (croissant) | 2000, 3 gr. | dépouillée | REPRISE_MASTER 27/05 |
| idem en config complète | −1 à −1,2 pt (redondant A2) | — | complète | idem |
M_DECLARE_DUAL | +5 pts | — | cognition | DECLARE 31/05 |
M_EMERGENT_DECLARE (recall) | 95,3 % vus / 54,7 % nouveaux | banc 400, 150+150 | — | DECLARE e2e 31/05 |
M_LEARN_FROM_COGNITION | cible phon 20 %→0 % ; MISS-frac →80 % (z=14,6) | 8 gr. | référence | MESURE_FIX 31/05 |
M_PHON_CONCEPT_BIND | ≈ mélange (z ≈ −0,95) | — | référence | audit étape 2 |
M_BPC_DECLARE 🎯 Declare BPC | 97,25 % cumul vs 94,31 % | long horizon | config Rem | MANIFEST / phase36 |
| A2 (cohort-oracle) exclu | 98,7 % vus / 100 % nouveaux | — | oracle | DECLARE 31/05 |
M_DECLARE_NEO (R+Assemblé+Cohorte) cheat-free | 97,50 % (K=1) / 98,82 % (K=3) | 4 gr. × 120 | cognition forte | NEO 03/06 (§17) |
M_NEO_MUTE + trigger (gap 0,005) | neutre : Δ +0,00 (K=1) / +0,14 (K=3) | 4 gr. × 120 | + R+A+C | NEO 03/06 (§17) |
16.2 — Référence rapide des constantes
5 sous-cerveaux M1_d, phases [0,103,207,311,415], LDIM=512 · 16 zones M2 (4×4), EMA 0,05, σ 1,5/4,0 · 12 cellules M3_d, α_Hebb 0,008, α_decay 0,001, seuil 0,005, SDIM=1024 · M4_d 70/30, top-10 · M5_d T 0,05–0,5, gap×20, poids M1_m 0,1 (F198) · reward +1/−0,5/+2/−1 · anti-Hebbian 0,004.
17Declare NEO (phase 46)
Nouveau declare émergent et croisé ajouté en additif sur phase45 : recall (adressée) + assemblé (phon→ortho) + cohorte (filtre board) + muette (par le son, croisée) + trigger. OFF-inerte (baseline byte-identique), aucun des 5 declares existants modifié, bPC M3_d autorisé mais NEO n'est pas M_BPC_DECLARE. Build courant OMEGA_v0_07_phase47_trexquant_mode.html (moteur = phase46).
17.1 — Les bascules NEO (UI)
MAJ 06/26 : 3 bascules cheat-free bleu ajoutées (son board-dérivé · jointe · arbitrage OS) + M_DECLARE_DUAL adopté dans la config de référence (§8.3, §17.5). Code couleur UI : vert config optimale · bleu cheat-free optionnel · orange lit le SON de currentWord (mot entendu) · rouge triche grise (A1/A2/A3).
| Nom UI | Défaut | Rôle |
|---|---|---|
M_DECLARE_NEO_ENABLED 🧩 Declare NEO · maître | OFF | Maître ; toutes les voies NEO inertes tant qu'il est OFF. |
M_NEO_RECALL_ENABLED 🔁 NEO · recall | ON* | Adressée : recall VSA depuis le board révélé + banc des mots vécus. 100 % sur vocab répété, inerte sur mot neuf. |
M_NEO_ASSEMBLED_ENABLED 🧬 NEO · assemblé | ON* | phon→ortho masqué : décode les positions sonores via L2[phonème]. w.p légitime, align masqué (graphème caché → UNI). Généralise au mot neuf. |
M_NEO_COHORT_ENABLED 🎯 NEO · cohorte | OFF | Filtre board-derived : n'autorise une lettre que si ≥1 mot compatible avec le motif révélé la porte. Élague les ratés. |
M_NEO_PHON_COHORT_ENABLED 🔊 NEO · son board-dérivé bleu | OFF | Ajout 06/26. Le SON décodé (assemblé+muette) vient du consensus phonémique de la cohorte board-compatible (mots de même longueur matchant le révélé), au lieu de wp.get(currentWord) → supprime toute lecture du son du mot caché = cheat-free intégral, sans currentWord. Garde de pureté M_NEO_PHON_COHORT_PURITY (0,5) contre l'override confiant-mais-faux. Mesuré (§17.5) : parité vrai-son in-lexique, coût OOV ~7 pts. Quand ON, l'assemblé passe orange→vert (ne lit plus le son du mot). |
M_NEO_PHON_COHORT_JOINTE 🔗 NEO · jointe son×ortho bleu | OFF | Ajout 06/26. Remplace l'argmax du son board-dérivé par la JOINTE Σ_φ Pcoh(φ\|p)·CR[φ\|voisins révélés] (table _neoCRS apprise descendant) — « croiser = jointe », mémoire §6. Mesuré in-lexique K=1, 4 graines : +2,2 pts vs argmax, jamais en-dessous (repro indépendante : +2,5). Seuil propre M_NEO_PHON_COHORT_JOINTE_CONF 0,30. Nécessite le son board-dérivé ON. |
M_NEO_OS_ARB 🧭 NEO · arbitrage OS (2 voies DRC) bleu | OFF | Ajout 06/26. Remplace la cascade either/or des voies par un mélange convexe OS — sublexicale (jointe) ⟷ lexicale (cohorte pondérée fréquence) — via M_OS_v07_step réutilisé (μ=r^α/(β+r^α), forcé α=β=1 neutre, découplé du θ de lecture). Vraie DRC interactive. Mesuré sans currentWord, 4 graines : +2,0 vs base, jamais en-dessous, ≈ DUAL (dans le bruit) mais plus propre et ~2× plus rapide. Non adopté (alternative) — §17.5. |
M_NEO_G2P_EXP_ENABLED 🧪 NEO · g2p révélé + pénalité | OFF | Apprend la table phon→graphe (voie assemblée) des positions révélées seules + pénalité bornée (M_NEO_G2P_EXP_PEN 0,5) sur lettres fausses, au lieu du mot complet (learnExp vs learn). Cheat-free strict ; mesuré = niveau de l'ancien g2p (98,9 %). |
M_NEO_MUTE_ENABLED 🔇 NEO · muette | OFF | Par le son : positions muettes prédites par phonogramme croisé (jointe) phonème-tête × offset × voisins révélés. |
M_NEO_TRIGGER_ENABLED 🎚️ NEO · trigger | OFF | (B) : la muette n'override que si la cognition est incertaine (M5_d.output.gap < 0,005). |
* sous-flags actifs uniquement si le maître est ON. Paramètres numériques (NEO_CONF 0,75 · MUTE_CONF 0,85 · TRIGGER_GAP 0,005 · RECALL_MARGIN 0,20) aux défauts mesurés, pas encore pilotables en UI ; M_NEO_G2P_EXP_PEN (0,5) est pilotable (champ « pén » du toggle g2p révélé).
17.2 — Cheat-free (vérifié ligne par ligne)
| Voie | Accès currentWord | Statut |
|---|---|---|
| Recall | _emrg_bind(currentWord, revealedMask) ; .charAt(p) comparé seulement si revealedMask[p] | révélé seul |
| Assemblé | wp.get(currentWord) (entrée légitime) + align(…, revealedMask) masqué | pas de fuite |
| Cohorte | motif révélé + lexique par longueur ; exclut lettres essayées-absentes | board-derived |
| Muette | phonème-tête (align masqué) ; voisins charAt(p±1) seulement si revealedMask[p±1] | révélé seul |
| Compteurs diag. | currentWord.indexOf(proposed) sous typeof _neoDbg !== 'undefined' | inerte (build) |
| Apprentissage | mot complet (voisins, alignement) dans endCurrentGame | descendant |
Seul accès au mot caché « complet » : w.p (prononciation) = entrée légitime (prémisse proto-langage, M4_PHON_USE_P) ; l'align masqué bloque toute fuite de graphème non révélé. A1/A2/A3 restent triche grise OFF.
17.3 — Croiser ≠ multiplier
La muette croise son et ortho — elle ne les additionne pas (dual log f + wO·ortho + wP·phon) ni ne les multiplie. Croiser = jointe P(lettre | phonème-tête, offset, voisins révélés) avec backoff.
- Resonator networks (Frady 2020) : « ne pas multiplier aveuglément » (décoder un produit lié = recherche combinatoire dure).
- bind = code retrievable par mot (rôle du recall : 0 cellule morte, ×6 généralisation, 100 % retrievable). Ce n'est pas le moteur de lettres : en dictionnaire global, bind = 19 % vs EM 64 % (spec figée, mur de capacité).
17.4 — Résultats mesuré
Harnais headless déterministe (reseed avant init → bpcW ; _omega_OSL_reset ; M_OS_v07.α/β=1), config cognition forte cheat-free, 4 graines × 120, Δ apparié + z.
| Condition | K=1 | K=3 |
|---|---|---|
| base (cognition seule) | 91,46 % ±0,86 | 93,75 % ±0,46 |
| R + Assemblé + Cohorte | 97,50 % ±0,59 | 98,82 % ±0,38 |
| + Muette 0,85 (sans trigger) | Δ −0,63 (z=−1,0) | Δ −0,28 (z=−1,1) |
| + Muette + trigger gap 0,005 | Δ +0,00 (z=0,0) | Δ +0,14 (z=0,8) |
Levier de winrate = Recall + Assemblé + Cohorte (niveau declare manuel, cheat-free). Le trigger fait passer la muette de −0,6/−0,8 à ≈ 0 : elle ne drague plus.
Contributions brique par brique (Δ vs base) : recall +1,76 (K=3 ; 100 % sur vécu, inerte sur mot neuf) · assemblé +5,28 (K=1) / +3,43 (K=3) · cohorte +0,50 (K=1) / +0,17 (K=3 ; hit 96,7→98,3 %).
17.5 — MAJ 06/26 — cohorte sans currentWord, DUAL adopté, arbitrage OS mesuré
Détail complet + reproductions : AUDIT_OMEGA.md §1.1–§1.6. Synthèse :
Honnêteté du régime (orange). Le 97,5 % cheat-free repose sur M_NEO_ASSEMBLED lisant wp.get(currentWord) = le son du mot (prémisse « mot entendu »). C'est légitime en dictée, mais au pendu c'est lire une propriété de la réponse → marqué orange en UI. Repères sans cette prémisse : OOV phon→ortho ~70,7 %, ortho pur OOV ~22 %.
Cohorte board-dérivée + jointe (cheat-free intégral, sans currentWord). M_NEO_PHON_COHORT dérive le son du consensus de la cohorte board (plus aucun wp.get(currentWord)). Coût mesuré : ~0 in-lexique, ~7 pts OOV (garde de pureté 0,5). La jointe son×ortho (_neoCRS, croiser = jointe) bat l'argmax de +2,2 pts à chaque graine (K=1, 4 graines).
| declare cheat-free (in-lexique K=1, 4 gr.) | winrate | err | coups |
|---|---|---|---|
cohorte-jointe seule (sans currentWord) | 94,8 % | 2,13 | 8,18 |
| + DUAL (adopté) — cohorte mot, freq×ortho×phon | 97,3 % | 1,80 | 7,88 |
| + ARBITRAGE OS (alternative, non adoptée) | 96,8 % | 1,89 | 7,95 |
DUAL adopté (§8.3) : declare niveau-mot (modèle de mot naïf-Bayes, pas le croisement per-lettre que §6/§3.1 régissent → pas d'entorse), cheat-free (board + longueur, jamais currentWord), +1,8 → 99,8 % mot-entendu / +2,5 → 97,3 % sans currentWord, stable. Caveat : reconnaissance in-lexique → neutre OOV. Arbitrage OS : seul mécanisme *principié* qui bat la base (+2,0, vraie DRC interactive via M_OS_v07_step), mais ne bat pas DUAL → gardé OFF-inerte comme alternative propre.
Directionnalité (garde-fou). La voie phon de la cognition est ortho→phon (sonorise les lettres révélées — lecture), l'arbitre OS a un θ réglé lecture ; le declare est phon→ortho (épellation, force pendu). Coexistence DRC bidirectionnelle ; mais l'arbitrage OS au niveau declare doit forcer son propre α=β=1 (fait) pour ne pas hériter du θ de lecture — sinon conflit de sens des voies.
Falsifiés (ne pas refaire, R66) : morpho distance-de-fin (−1,0) · morpho backoff dense (+0,3 bruit) · croisement cross-modal au concept M3_d (−3,0, mur de capacité) · jointe-mot (−2,3) · fréquence croisée au phonème (−4,3). Le résidu cheat-free vit dans l'ambiguïté cohorte, pas dans la table phon→lettre ni le concept.
17.6 — Réserves hypothèse / à faire
- Muette neutre avec trigger, pas un levier : résidu muet irréductible, déjà couvert par la cognition. Vivante et inoffensive.
- Trigger : SPSA sur le gap = plat (winrate constant → pas de gradient ; effet sous le quantum de mesure). Un reward dense par-décision (avantage
[muette∈mot] − [cognition∈mot]) serait nécessaire pour l'apprendre en ligne. - Paramètres numériques NEO pas encore pilotables en UI (seuls les 6 toggles le sont).
- Puissance 4 graines × 120 ; R66 suggère ≥ 200 × 4 pour resserrer (directions stables).
17.7 — MAJ 06/2026 — OOV honnête, voie n-gram, et le « C » cognitif mesuré
AUDIT_OMEGA §1.6.1–§1.12 · config : docs/CONFIG_TOGGLES.md)
(a) Fuite cohorte. Le « ~97 % hors-lexique » antérieur était une fuite (cache _neoWBL non invalidé : le mot « retiré » restait dans la cohorte). Corrigé. Vrai OOV ≈ 33 % (généralisation sublexicale pure) ; cognition seule ≈ 11 %. La cognition ne généralise pas en sous-lexical ; le levier OOV est l'agrégation de la structure du lexique.
(b) Voie n-gram (nouveaux toggles). M_NEO_LETTER_NGRAM (n-gram positionnel pré-calculé, cheat-free) ≈ 57-66 % OOV ; M_NEO_OS_ARB_NGRAM le branche comme voie sublexicale de l'arbitrage OS (bascule auto : in-lex ~97 % / OOV ~60 %, config unique) ; M_NEO_NGRAM_GAP (plus proche voisin révélé d=1..4) ajoute +2 pts OOV (~63-65 %, bande SOTA) = 1er gain cognitif > substrat. Tous OFF par défaut (R66).
(c) Le « C » appris — falsifié comme franchissement. Le C léger (maxent/GATE/POE) et le C lourd (transformer, hook M_NEO_C_HEAVY OFF-inerte) ont été construits et mesurés : le lourd converge vers le n-gram gap-aware sans le battre (winrate à config optimale : parité, OOV Δ ≈ −1,3 ; entraîné sur de vraies parties = recul par couverture lexicale). Le n-gram gap-aware (gratuit, interprétable) reste le plafond pratique — « cognition > oracle = léger/interprétable » confirmé. Design d'un futur organe (hub d'arbitrage appris) : docs/COGNITION_DESIGN.md.
OMEGA-Ω — rapport de référence & mode d'emploi. Consolidation de trois itérations (vulgarisation 01/06, audit boucles 01/06, rapport v0.07) par Claude (Anthropic), direction Rem. Instantané au 03/06/2026 — addendum 14/06/2026 : application dérivée = dictée diagnostique (dys), voir dictee/ ; addendum 18/06/2026 : levier grammaire + correcteur dys + grammaire à double voie (Lexique 4 cgram), §18 ; déploiement = lexique embarqué compressé (gzip+base64, navigateur ≥ 2023), build phase47 (declare NEO + mode Trexquant ajoutés — §17). Convention mesuré/design/hypothèse/exclu. Chaque interrupteur cité porte son nom UI. Doctrine : cap §43 strict · R66 (mesure avant activation) · cognition > oracle.
Noms UI, libellés de boutons, panneaux et défauts au boot vérifiés sur le build phase45 (tooltips inclus) ; les 6 toggles NEO vérifiés sur phase46 (§17). Restent indicatifs (depuis docs/mémoire, non re-vérifiés ligne-à-ligne) : le mapping des F-codes internes et le détail des constantes. Les chiffres mesurés sont datés et sourcés.
18Dictée diagnostique (application dys)
Objectif. Application dérivée ciblant les troubles de l'écrit (dys), bâtie sur la double route phon↔ortho du moteur. Le moteur diagnostique le type de chaque faute d'orthographe et oriente l'entraînement. Détails & mesures reproductibles dans dictee/ (JOURNAL, README — qui inclut l'audit fermé + le M3_d falsifié —, CORRECTEUR, GRAMMAIRE_DOUBLE_VOIE).
Cadre = dictée de PHRASES. Mesuré : sur des mots isolés, 84 % des mots ont des homophones (surtout flexionnels) → indécidables au son seul. La phrase fournit le contexte : le mot cible étant connu, homophones et accords deviennent des erreurs gradables — sans M3_d (l'expérience « M3_d désambiguïse les homophones » a été falsifiée au design : M3_d encode l'ortho/le son, aucune entrée sens/contexte ; cf. dictee/README.md § « Falsifié M3_d »).
Familles d'erreurs (typologie dysorthographique : phonologique · lexicale-surface · sémantique/morpho), multi-étiquette :
- accent (é/è/ê) · voisée/sourde (p·b, t·d, k·g, f·v, s·z) · inversion · lettre muette · lettre en trop
- homophone (graphie homophone fausse) · accord (homophone flexionnel tranché par le contexte) · surface (graphie « plausible mais fausse » détectée par un normaliseur phonétique : leson→leçon, bato→bateau)
- omission / mot en trop (alignement Levenshtein des mots cible vs élève)
Remédiation. Profil d'erreurs persistant (par famille) ; la sélection des phrases cible en priorité la famille la plus ratée (« on travaille : accord »). On ne se contente pas de diagnostiquer : on oriente l'entraînement.
UI. Panneau additif OFF-inerte (IIFE — n'altère pas le moteur pendu ; baseline intacte, doctrine R66) : bouton ✍️ Dictée diag (bas-droite) → choix de difficulté, dictée vocale (synthèse fr-FR), saisie de la phrase, feedback par mot coloré par famille + correction révélée, profil + réinitialisation.
Données. Lexique 4 (New et al. 2026, lexique.org, CC BY-SA 4.0) : 30 phrases graduées (dictee/sentences.json) + index homophones plein (43 580 groupes). Mesuré (synthétique, 30 phrases) : rappel 100 % sur accent/accord/homophone/omission, surface 17/17.
18.1 Levier grammaire — l'accord en contexte
Le contexte de la phrase rend les accords gradables. Le levier (dans diag_sentence.py) couvre : accord sujet-verbe (gouverneur via mots-outils, mesuré 94 %), sujet à distance (skip_pp saute le groupe prépositionnel : « le ver de la terre creuse »), participe passé (être → accord sujet ; avoir → invariable sauf COD antéposé « la pomme qu'il a cueillie »), genre du GN (déterminant genré + route lexicale du nom-tête), et la désambiguïsation des homographes nom/verbe par le contexte (« le lit » vs « elle lit », 5/5). Le diagnostic situe aussi un stade développemental (Ferreiro/Berliocchi : phonologique → alphabétique → lexical → morphosyntaxique, 4/4).
18.2 Correcteur dys (débouché applicatif)
Le même levier, retourné sans corrigé (le correcteur ne connaît pas la cible → il infère l'intention), donne un correcteur d'homophones grammaticaux : a/à, son/sont, on/ont, leur/leurs, -é/-er, peu/peux/peut, ce/se, et/est. 0 faux positif sur batterie (propriété cardinale visée : ne jamais « corriger » du texte juste) — mais requalifié (06/2026) : mesuré sur 16 342 vraies phrases correctes (UD French), le FP réel était 6,0 %, ramené à ~2,5 % par 5 lots de durcissement FP-safe (stoplists invariables/adverbes, genre capitalisé/non-nom-tête, sujet pluriel à distance, participes irréguliers, noms-homographes via cgram) ; garde permanente dictee/fp_stress_test.py. Le domaine dys (phrases courtes) est plus bas, pas 0. Détection : 22/24 en corpus, 12/15 en held-out (vocabulaire neuf → les règles généralisent). Angle unique : il corrige + situe le stade (remédiation dys), ce qu'aucun correcteur grand public ne fait. UI : bouton 🩹 Correcteur — colle ton texte, fautes soulignées, clic = applique la correction, stade affiché, police lisible. Honnêteté : l'accord en genre dans le correcteur a été tenté puis écarté (mesuré FP-insûr : presque toutes les formes adjectivales sont aussi des noms dans Lexique4 → il faut un POS/tagger ; la route lexicale du genre reste, sûre, dans le diagnostic).
18.3 Lexique 4 → cgram & grammaire à double voie
build_cgram.py extrait de Lexique 4 : 12 415 formes verbales (couverture du correcteur), 53 050 noms à genre non ambigu (route lexicale du genre), un sous-ensemble haute-fréquence embarqué dans l'app (bloc <script id="vdc-lex">) et les paires adjectivales. La grammaire suit alors l'architecture signature d'OMEGA (GRAMMAIRE_DOUBLE_VOIE.md) : double route (lexicale cgram × sublexicale règles, croisées en jointe §3) et double boucle (montante = décider ; descendante = apprendre depuis les cibles connues — descending_probe.py apprend le lexique de genre depuis l'usage : 100 % de précision, FP=0, mais data-bound : sa valeur vient du volume = vraies copies corrigées).
evo/PHRASE_HANGMAN_PROBE.md.18.4 Aide-frappe, boucle d'apprentissage & déploiement maj 24/06/2026
Aide-frappe (complétion). Le correcteur est aussi une aide à la frappe temps réel : pour le mot sous le curseur, il propose une complétion (mots plus longs du même préfixe, triés par fréquence et accentués : recev→recevoir, télé→téléphone) en plus de la correction. Les accents sont restaurés via le lexique du speller (OMEGA_LEX4 est déaccentué — le pendu joue sans accents) : solution embarquée, hors-ligne. Hors périmètre de parité : une complétion est une suggestion d'UI, pas un flag FP=0 (l'invariant flags ⊆ Python n'est pas concerné).
Boucle d'apprentissage. Un profil dys unifié (DysProfile) agrège les familles d'erreurs des deux surfaces d'écriture (dictée = taux supervisé, cible connue ; correcteur = comptage en rédaction). Il pilote une sélection de mots adaptative dans la dictée — tirage pondéré sur plusieurs faiblesses (et non plus la seule famille la plus ratée), avec un seuil de variété (≈ 45 % de tirages libres + anti-répétition, jamais 3× la même famille de suite) pour ne pas démotiver — et affiche une courbe de progrès par famille. Le pendu reste hors boucle : deviner des lettres (sur un mot déaccentué) n'exerce pas l'écriture — erreur de catégorie assumée.
Trois moteurs & déploiement. Le même correcteur tourne en parité vérifiée sur trois moteurs (référence Python correcteur_probe.py ↔ app ↔ extension navigateur dys-core.js ; invariant flags ⊆ Python, FP=0, testé en CI). L'app monolithe (pendu + dictée + correcteur, tout inclus) est installable et hors-ligne (PWA). Feuille de route & état : DICTEE_ROADMAP.md ; chronologie : dictee/JOURNAL.md ; UI : boutons 🩹 Correcteur et ✍️ Dictée diag dans l'app.
Limites (honnêtes). Validation encore synthétique + held-out — pas de copies d'élèves réelles (validation terrain orthophonistes / corpus FR en ligne fetch_gec_corpus.py = à faire ; elles valident et nourrissent la boucle descendante). Couverture verbale du correcteur via liste blanche + cgram (homographes : croiser au contexte). Accord en genre du correcteur = en attente d'un POS/tagger. Normaliseur « surface » approximatif.