OMEGA — reference

OMEGA

A cognitive architecture that learns to play French Hangman — not to win, but to make its decisions emerge from an artificial brain rather than from a dictionary.
Version v0.07 · build phase47 · declare NEO + Trexquant mode (§17) Snapshot 01/06/2026 Audited ancestor v0.06 (~32–40k lines, plateau ~78 %) Doctrine cap §43 · R66 · cognition>oracle
In plain terms — what this document is about

OMEGA is a small software "brain" that plays Hangman. Its distinctive feature: it is allowed to look at the letters already revealed, never the hidden word. So it has to guess like a human — by recognising words it has seen, by "sounding out" what it reads, by leaning on the shape of words. This document explains how it is built, what it can do (≈ 90 % wins cheat-free), what it cannot yet do, and how to use it. The "Plain" button top-left hides the technical tables; "Full" shows everything.

Status: measured quantified effect, dated source design settled architectural choice hypothesis not yet decided excluded out of the chain (gray cheating / crutch)
name = the name of the button/panel in the interface. Every toggle mentioned comes with its UI name or the panel where it lives. Internal functions (codes F***) have no button: they are flagged as such.

0Methods & conventions

0.1 — Status of claims

Every load-bearing fact is labelled. The scientific value of the project rests on this strict separation:

  • measured reproducible empirical result (paired headless run, fixed seeds), dated source.
  • design settled architectural choice, not re-argued in this version.
  • hypothesis interpretation or conjecture not yet settled by measurement.
  • excluded deliberately outside the decision chain (gray cheating or crutch).

0.2 — Three metrics, not to be confused

MetricDefinitionRole
Wins (win rate)Fraction of games won.Final metric — but not the project's arbiter.
CoverageFraction of positions correctly revealed before the end.Finer, less noisy (a game can be lost with high coverage).
OS_dissDissonance between the direct circle and the mirror circle (RSA, 1−cosine).Priority structural metric: the goal is self-regulation.

0.3 — Measurement protocol

  • Seeded and paired comparisons (same words, same seeds); A/B/C/D conditions.
  • Typical N: 150–2000 games; 8 paired seeds for fine deltas (z statistic).
  • Chained games, never reset between plays: learning is inter-game (principle L04). Measuring with a reset invalidates any cumulative mechanism measured (the "30 games × resets" measurement had skewed the evaluation of F177).
  • Inertia OFF: a toggle is cleanly disconnectable if, switched off, the output is byte-identical to the baseline.

0.4 — Reproducibility caveat

Fixed in phase46 (Fix#1): the word picker and the bench helpers now go through a seeded omegaRand()deterministic headless measurements (bit-for-bit repeatable). Only the intentional fallback to Math.random() remains when no seed is set (free interactive play). The "robust" figures come from the seeded paired headless protocols.

0.5 — Version note (read once)

Two lineages coexist. v0.06 "OMEGA-Ω" (~32–40k lines, plateau ~78 %) is the audited ancestor; v0.07 (rebuild, current build phase47; base phase45 ≈ 9,574 lines) is the system described here. The bugs numbered B1/B3 and the correlation r=−0.153 come from v0.06 and motivated the rebuild; they are flagged as inherited wherever they appear.

1Object & framing

OMEGA-Ω is a cognitive architecture that plays Hangman on a hyperdimensional-computing (HDC) substrate. The goal is not to maximise wins but to make the decision emerge (the choice of a letter) from brain-inspired mechanisms.

design Category distinction (internal ref. F169): a solver maximises wins by any means (n-grams, full dictionary); a cognitive architecture that plays Hangman demonstrates learning under impoverished constraints. OMEGA is the latter. Per F169, 30–40 % wins without a lexicon would already be a good result (the human cognitive limit on word prediction).

Guiding principle — cognition > oracle The decision must derive from what is perceived and what is learned, never from consulting the hidden answer. A system that won 100 % by dictionary lookup would be a failure given the ambition.

2Overview & performance

A self-contained web application (a single HTML file) bundling the cognitive engine, the French dictionary and the measurement dashboard. The v0.07 rebuild was motivated by the separation of the spelling/phonology substrates: their cross-contamination made the routes degenerate — an unintended reproduction of surface-dyslexia errors (Plaut & Shallice 1993).

In plain terms — the idea in three strokes

Two reading routes (the written and the sound) linked by a shared concept; two loops per route (one that perceives-decides, a "mirror" one that corrects-learns, the way sleep consolidates the day); and an arbiter (OS) that doses between the written and the sound and stops any source from "cheating" by imposing the answer.

2.1 — Performance: sourced figures

The rate depends on difficulty, configuration and horizon. Always state the regime.

RegimeWinsAvg err.Cov.Status / source
Pure-frequency baseline~22–23 %~5.5measured declare e2e 31/05, 150+150
Cheat-free early v7 (hardened Hangman)~2.6 %~45–50 %measured Blueprint v7 §1.3, 02/05, 200 chained games
Cheat-free — reference config (cognition)~90 %~2.5measured MESURE_FIX 31/05, paired headless, A1/A2 OFF (89.5±2.6 / 90.6±2.9)
Cheat-free + declare NEO (R + Assembled + Cohort)97.5 / 98.8 %measured NEO 03/06 (§17), 4 seeds × 120, K=1 / K=3
+ declare (confidence 0.85)~97.7 %~1.7measured same, 31/05
Recall — words already seen95.3 %1.33measured declare e2e, bench 400
Never-seen word (clean assembled decoding)54.7 %4.45measured same
Full config with A2 excluded~95 %measured REPRISE_MASTER — gray cheating
Cohort-oracle (full lexicon = A2 ceiling)98.7 % / 100 %~1.1measured declare e2e 31/05 (seen / new)
Reading — the integration thesis (1) Pure frequency yields ~22–23 %; the cheat-free reference config reaches ~90 % on the same hardened task: it is the integration of the modules, not a single route, that produces the performance. (2) We start from ~2.6 % (early v7): the gain comes from work between 02/05 and 31/05. (3) Cheat-free (90 %, +declare NEO 97.5–98.8 %) comes within a few points of the oracle ceiling (98.7 %) without reading the dictionary — this is the central result. (4) The 95 % of the full config rests on A2 (lexical lookup): performance, not cognition.
Regime note — in-lexicon vs out-of-lexicon. The figures above (97–98 %) are in the in-lexicon regime (word in the dictionary, known length, budget 6): here OMEGA is on par with the best lexical solvers. Out-of-lexicon (words removed from the dictionary, Trexquant-style — measurable via the 🎯 Trexquant button, §8): 70.7 % via the phon→ortho cascade (the concept, the word being heardw.p legitimate), 22 % in ortho only. Trexquant benchmarks (letters-only, no sound): ~50 % baseline, ~65-68 % good solvers. An honest reading: excellent in-lexicon; good out-of-lexicon via the phon→ortho concept (above good solvers, but while hearing the word); weak in pure ortho — sub-lexical OOV generalisation remains the weak spot (a morphology layer is to come).
⚠️ UPDATE 06/2026 — OOV figures corrected (cohort leak) The out-of-lexicon values in this section (70.7 % "with sound", 54.7 %, 22 %) predate the discovery of a cohort leak (the _neoWBL cache was not invalidated : the "removed" word stayed in the cohort; AUDIT_OMEGA §1.6.1). True measured figures : cognition alone ≈ 11 % (does not generalise sub-lexically), pure sub-lexical spelling ≈ 33 %, the aggregating n-gram route (statistical but cheat-free) ~57-66 %, + gap-aware reasoning → ≈ 64 % (re-verified, 3 seeds, SOTA band) ; +17 pts vs a naive n-gram (46.7 %). The "54.7 % / 70.7 %" cells that remain above and below are kept as a historical trace but obsolete. Detail : memoir docs/MEMOIRE.html §10, and evo/EVO_ROADMAP.md.

2.2 — Founding principles (L01–L04)

  • L01 — double Möbius design: two antagonistic circles (direct = perception→decision; mirror = result→correction) linked by the OS.
  • L02 — functional invariance: concepts emerge above the substrate; the 12 concept cells of M3_d are learned (Hebbian), not hard-wired.
  • L03 — OS as dialectical governor: keeps the tension between the two circles without letting either dominate (a construction specific to the project; neighbours: GAN, adversarial RL).
  • L04 — inter-game learning: the mirror and the sound↔letter map persist across games; no reset.

2.3 — Four-level learning cascade (F139)

  1. Phonetic primitive (hard-wired): 14 articulatory features × 26 letters + an HRR ortho component (0.85 / 0.15).
  2. Emergence of a proto-language: 5 sub-brains of M1_d produce vocabulary.
  3. Sound↔letter map (phonGraphMap[26][SDIM]): learned by playing (observation + consolidation).
  4. Hangman: the testbed; decision = comparison of the internal state against the map (and/or the M5_d softmax).

3The task: Hangman (specification)

  • Words: length ≥ 7 letters; lexicon 88,939 words (Lexique 4, ≥ 7 subset, upper-cased/deaccented).
  • Start: 0 letters revealed ("hardened" Hangman).
  • Budget: 6 errors.
  • Legitimate information: revealed letters, length, tried letters, knowledge gained through experience.
  • Illegitimate information: the hidden word — directly, or by enumerating the dictionary down to the single compatible word.

Hangman is chosen for its context poverty: the player must actively generate hypotheses (like "sounding out" an unknown word). A demanding and revealing testbed.

4Architecture

Two parallel columns, a conceptual bridge, an arbitration module.

  • Orthographic route (M*_d): revealed letters → feature → spatial pattern → concept → lexical candidates → decision.
  • Phonological route (M*_phon): conversion into SAMPA phonemes (distinguishes é/è/an/on…), a second reading route (Coltheart 2001).
  • M_S hub (shared concept): an amodal crossroads, cross-modal auto-encoding (Rogers 2004; Patterson 2007) — enter through one modality, reconstruct the others.
  • OS — arbitration module (L03): combines ortho + phon via w(r) = −r/(1+r) (r = phon strength ÷ ortho strength), decides the letter, dilutes any signal pre-imposing an answer. Publishes OS_diss, OS_lect, OS_mod, OS_speed.
Honest note on w(r) design: the form −r/(1+r) is a chosen dosing (monotone, bounded); its precise theoretical justification is not documented in the sources consulted — to be treated as a design parameter, not a derived result. measured Learning θ=(α,β) (🧬 Train θ, STATISTICS panel) converges toward α≈1.13, β≈0.65–0.72.

4.1 — Structural layers

  • Pipeline 0 (statistical priors): in v0.06, three modules M_E (episodic memory), M_A (letter priors + reward shaping), M_P (pattern matching). measured Absent from the v0.07 build but absorbed: priors → the LETTER_FREQ constant; pattern → A2/computeLex4LetterScores; episodic ≈ the game itself. v0.07 consolidated, it did not lose.
  • Typed channels: ~32 channels (CONCEPT, VECTOR, EVENT, SCALAR) connect the modules; some cross-route links are dormant.
  • Independent substrates: ortho 26D (identity), phon 26D one-hot + 14D features, cross-modal HRR hub — no derivation chain between substrates (a key v0.07 fix).
  • Möbius loop (P1/P2) design: a designed closed circuit (P1 direct, P2 mirror, P1→P2→P1). Receiving the word in P2 is by design (simulation, Hesslow 2002), with the OS handling anti-cheat. In practice P2 and the extended mirror modules are disconnected (see §12).

Diagram — two routes, two loops, one arbiter

                       ┌────────────────────────────┐
                       │    OS — arbitration module │
                       │   combines ortho + phon     │
                       │   w(r) = -r / (1 + r)       │
                       └────────┬──────────┬─────────┘
                 ortho decision │          │ phon decision
        ──────────────────────  │          │  ──────────────────────
            ORTHO ROUTE (M*_d)   │          │     PHON ROUTE (M*_phon)

        bottom-up↑  mirror↓                 bottom-up↑  mirror↓
        M5_d  ──►  M5_m  (reward)           M5_phon ─► M5_phon_m (reward)
         ▲           │                       ▲          │
        M4_d ◄┄ cross p ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ M4_phon ─► M4_phon_m   effective
         ▲      (M4_PHON_USE_P)              ▲          ┆
        M3_d ◄─ written ─ M3_m (a-Hebb)      M3_phon ┄► M3_phon_m   observational
         ▲     (conceptCells)                ▲
        M2_d  ──►  M2_m                      M2_phon      M2_phon_m  absent
         ▲           │                       ▲
        M1_d ◄─ ≈0.1 ─ M1_m (letScore)       M1_phon      M1_phon_m  absent

  Ortho mirror = complete (5 stages) · phon mirror = truncated (M5→M4; M3 obs; M2/M1 absent).

5Modules M1–M5, loops, constants

5.1 — The five stages

StageOrtho route (M*_d)Phon route (M*_phon)Role
M1proto-language, 5 sub-brains (LDIM=512)articulatory substrate (40D)raw perception + proto-vocabulary
M216 dimensional zones, "Mexican-hat" filteringresonance (40D)spatial shaping
M312 learned concept cells (SDIM=1024)concept (1024D)conceptual representation (M_S hub)
M4top-10 lexical candidates (70 % semantic + 30 % letter-frequency)SAMPA candidatesplausible words/sounds
M5softmax decision, adaptive temperature (26)decision (26)per-letter vote

Clarifications: the 16 zones of M2 are dimensional (compartments of the vector), not positional. The M5 temperature tunes exploration (clear gap → decisive choice; small gap → exploration).

5.2 — Two loops per route

  • Bottom-up (M1→M5): perceives and decides; reads the word only at revealed positions (cap §43); never accesses hidden letters.
  • Top-down (mirror, M5→M1): receives the result, adjusts the weights; teaches, does not decide.

Mirror wiring. Ortho complete: M5_m (reward) → M4_m (letterPenalty) → M3_m (anti-Hebbian, writes conceptCells) → M2_m (zonePenalty) → M1_m (letterScore). M3 shares its weights (the only stage where the mirror writes); M4/M2/M1 have a separate state fed back in; M1_m.letterScore may co-decide M5 with weight M5_D_M1_M_WEIGHT = 0.1 (F198), but this is now gated by the toggle M5_D_M1_M_ENABLED = default OFF (decision 17/06, AUDIT_OMEGA §1.4.2: M1_m does not earn its 0.1) → in baseline M1_m does NOT influence the decision; the assert only pins the weight (0.1) if it is re-enabled. Obsolete: "0.0 baseline" AND "0.1 without toggle". Phon truncated: M5_phon→M4_phon effective (read by bottom-up M4_phon), M3_phon_m observational, M2_phon_m/M1_phon_m built + called but with no consumer (dormant — not "never built"; cf. AUDIT_OMEGA §1.4/D1).

5.3 — Main constants

ModuleConstantsValue
M1_dsub-brains; phases; dim5 ; [0,103,207,311,415] ; LDIM=512
M2_dzones; grid; EMA; σ_exc/σ_inh/weight16 ; 4×4 ; 0.05 ; 1.5 / 4.0 / 0.5
M3_dcells; α_Hebb; α_decay; threshold; dim12 ; 0.008 ; 0.001 ; 0.005 ; SDIM=1024
M4_dcosine/freq weights; top-K0.7 / 0.3 ; 10
M5_dT_min/T_max; gap factor; M1_m weight0.05 / 0.5 ; 20.0 ; 0.1 (F198)
M5_mreward HIT/MISS/WIN/LOSE+1.0 / −0.5 / +2.0 / −1.0
M3_manti-Hebbian rate0.004 (½ of the direct Hebbian)

The ratio α_Hebb/α_decay = 8 is an identified debt (unbounded norm, §12).

6Toggle reference (47)

47 flags in total (phase45): 31 exposed as toggle buttons, plus controls in dedicated panels (dictation, bind bridge) and base JS flags. Phase46 adds 6 NEO toggles + 4 parameters → 37 toggles; phase47 adds the M_TREXQUANT_MODE mode → 38 toggles (§17). UPDATE 06/26: +3 cheat-free blue toggles (M_NEO_PHON_COHORT board-derived sound · M_NEO_PHON_COHORT_JOINTE · M_NEO_OS_ARB OS arbitration) → 41 toggles; M_DECLARE_DUAL adopted (preset). UI colour code, 4 categories: green optimal config · blue optional cheat-free · orange reads the SOUND of currentWord (word heard) · red gray cheating (A1/A2/A3). Detail of the 3 new ones: §17.1. Default = state at load. "preset ✔" = switched on by the reference config (§8).

UI names verified on the phase45 build. The "UI name" column gives the exact button label and its panel. 31 toggles are buttons (panels Toggles · Phase A + B2 and Débranchable · triche grise [Disconnectable · gray cheating]); the dictation/bind controls live in dedicated panels; the rest are base JS flags. At startup, all toggles are OFF except M4_PHON_USE_P ("φ · Croisement p" [crossing p]) = ON. The "preset ✔" mark flags those the reference config (§8) switches on. Build phase46/47: 6 NEO toggles + the 🎯 Trexquant mode added (38 toggles in total) — see §17.
Code (toggle)UI name · panelDefault (boot)StatusRole / measured effect
L01_A1_M2_ORTHO« A1 · Orthography » · Débranchable·triche grise [Disconnectable·gray cheating]OFFexcludedOrthographic perception (M2): reads the revealed letters (spelling). Legacy ortho base. Feeds the raw-frequency path.
L01_A2_M4_LEX4« A2 · Lexique 4 » [Lexicon 4] · Débranchable·triche griseOFFgray cheatingDictionary filter + letter score by cohort frequency. "The lever that knows French". Ceiling ~95–98.7 % but lexical lookup (see §7). Allowed only to declare.
L01_A3_M5M_WORDLEX4« A3 · Word Lex4 » · Débranchable·triche griseOFFexcludedRe-injects the whole word (Lex4) into the top-down correction (M5_m). An oracle-crutch.
L01_A4_M4M_DECOMP« A4 · Decomp » · Toggles·Phase A+B2OFF · preset ✔activeTop-down decomposition (M4_m): converts the word signal into per-letter penalties.
L01_A5_M2M_POSITIONAL« A5 · Positional » · TogglesOFF · preset ✔activeTop-down positional correction (M2_m): weights which positions matter.
L01_A6_OS_CONCEPT_ARBITRAGE« A6 · OS Arbitrage » · TogglesOFF · preset ✔activeThe OS arbitrates between the routes' conceptual signals to decide the letter.
L01_B2_MOBIUS« B2 · Möbius » · TogglesOFFto measureCross-coupling ortho↔phon (Möbius twist). Pure effect not validated (R66).
M_VOIE_PHON« φ · Voie Phon » [Phon route] · TogglesOFF · preset ✔activePhonological route: converts the word into sounds (SAMPA), reasons in parallel with the ortho (dual route, Coltheart).
M_OS_V07« φ · OS v07 » · TogglesOFF · preset ✔activeLets OS v07 combine ortho+phon and drive the decision. OFF: the phon runs in observation only.
M4_PHON_USE_P« φ · Croisement p » [crossing p] · TogglesON · preset ✔activeCrossing: M4_phon blends a prior from the real phonetics (p/SAMPA field, from the cohort). The only toggle ON at boot.
M_SUBSTRAT_ORTHO_PURE« φ · Substrat pur » [pure substrate] · TogglesOFF · preset ✔activePure orthographic substrate (anti-contamination). OFF = identical to the legacy base.
M_PHON_FEEDBACK« φ · Feedback ↓ » · TogglesOFF · preset ✔activeTop-down phon feedback (Phase 3.6 B): M4 penalty effective, M3 observational.
M_WORD_DECLARE« 🎯 Declare mot » [Declare word] · TogglesOFFmeasuredDeclares the word when the pattern + misses leave only ONE candidate (cheat-free). CONF field: 1.0 = 100 % sure; ~0.70 = sweet spot.
M_IG_SELECT« 🧠 InfoGain » · TogglesOFFto measureFavours the most discriminating letter (entropy, Lindley 1956). W field = weight. Pure IG over-explores.
M_IG_PSUCCESS« IG x P(succes) » · TogglesOFFto measureRequires InfoGain ON. Weights the info gain by P(presence) — avoids burning a life on a rare letter (J/Y).
M_BPC_M3D« bPC M3_d » · TogglesOFF · preset ✔activeCompetitive auto-encoder of the concept (encoder W from M1, tied decoder, reconstruction). Output decoupled from letter scoring. Win rate not regressed (99.25 %).
M_BPC_READOUT_COUPLE« Couplage readout » [readout coupling] · TogglesOFF · preset ✔activeInjects the concept's learned letter score (R, by reward). +2 to +3 pts in a stripped config; hurts in a full config (A2 redundant). Requires bPC M3_d.
M_PHON_READOUT_COUPLE« Couplage readout φ » [readout coupling φ] · TogglesOFF · preset ✔activePhon counterpart (R_phon), parity with the ortho coupling. Requires the phon route.
M_PHON_CONCEPT_BIND« Concept lié φ (étape 2) » [bound concept φ (step 2)] · TogglesOFF · preset ✔measured: nullThe phon readout reads a bound concept (positions bound by permutation) vs a blend: ≈ blend (z ≈ −0.95). Separate buffer, M_S intact.
M_BPC_DECLARE« 🎯 Declare BPC » · TogglesOFFmeasuredDeclares a word when the M3_d concept points to it (cheat-free via M1_d). +5.42 pts mean multi-seed; 97.25 % vs 94.31 % long horizon. Requires bPC M3_d.
M_DECLARE_DUAL« 🦴 Declare DUAL (cheat-free) » · Toggles green/presetOFF · preset ✔adopted 06/26Declares via the board buffer (public moves), never currentWord. Board cohort, fusion of freq × ortho-bigram × phon-g2p (a naive-Bayes word model, not the per-letter crossing). ADOPTED in the cheat-free config (§17.5): +1.8 → 99.8 % (word heard) / +2.5 → 97.3 % (without currentWord), 4 seeds, never below; in-lexicon recognition (neutral OOV). (Old cognition measurement: +5 pts 93.7→98.7 %.)
M_LEARN_FROM_COGNITION« 🧠 Apprendre depuis la cognition » [Learn from cognition] · TogglesOFFmeasuredAnti-crutch: when a declare forces a letter, the learners learn from the cognitive letter (pre-override). Restores ~2× the θ signal (0.010→0.021).
M_OS_LEARNING« θ · Apprentissage » [Learning] · TogglesOFF · preset ✔activeMaster switch: lets the OS learn θ=(α,β). Enables the 🧬 Train θ / 📈 Sweep β buttons.
M_OS_LEARNING_GUARD_1_BOUNDED« θ · Garde 1 borné » [Guard 1 bounded] · TogglesOFF · preset ✔designConstrains θ to a bounded parametric family.
M_OS_LEARNING_GUARD_2_ANALYTIC_AUDIT« θ · Garde 2 audit » [Guard 2 audit] · TogglesOFF · preset ✔designAlerts if learned θ drifts from analytic θ (read-only).
M_OS_LEARNING_GUARD_3_MDL_REGUL« θ · Garde 3 MDL » [Guard 3 MDL] · TogglesOFF · preset ✔designSparsity regularisation (Occam/MDL).
M_OS_LEARNING_GUARD_4_COHERENCE« θ · Garde 4 cohérence » [Guard 4 coherence] · TogglesOFF · preset ✔designRejects an update that raises the win rate but lowers internal coherence.
M_OS_LEARNING_ONLINE« θ · Apprentissage EN LIGNE (SPSA) » [ONLINE learning (SPSA)] · TogglesOFFto measureOnline SPSA, per game, no replay. Reads W/c/η, respects the 4 guards. Separate from the batch Train θ.
M_EMERGENT_DECLARE« 🦴 Declare émergent · recall » [emergent declare · recall] · TogglesOFFmeasuredRecognises an already-played word (bind of the revealed board vs the bench). 95.3 % seen / 1.33 err. 100 % cheat-free.
M_EMERGENT_ASSEMBLED« 🧬 Declare émergent · phon→ortho » [emergent declare · phon→ortho] · TogglesOFFexcluded from HangmanAssembled decoding: at a sound position, forces the graph if conf>0.75. 54.7 % new word (generalisation). The shortcut variant = oracle (§9).
M_EMERGENT_G2P_ONLINE« 🔤 g2p appris en jouant (online) » [g2p learned by playing (online)] · TogglesOFFmeasuredPhoneme→graph table (EM) learned from the played words only, post-game. Doctrinally clean. Batch ceiling around ~900 games.
M_DICTEE_LEXICAL« Dictée d'un mot aléatoire » [Dictation of a random word] · Route sublexicale panel [Sub-lexical route]OFForacleLexical dictation mode (lookup, ~92 % known / 0 % new = a memory signature). Not a toggle button.
M_DICTEE_SUBLEXICAL« Dictée sublexicale d'un mot » [Sub-lexical dictation of a word] · Route sublexicale panelOFFto measureSub-lexical dictation (EM, learned cognition). Dedicated button.
M_PHON_BINDPont bind panel [Bind bridge] · « Mesurer (bind vs mélange) » [Measure (bind vs blend)]OFFto measurePhon HRR binding. A measurement control (1024-D), not a toggle button.
M_PHON_BINDCONDPont bind panelOFFto measureConditioned phon binding (revealed-aware).
M_PHON_READOUT_ABPont bind / readout panelOFFto measureA/B phon readout comparison.
M_S_ENABLEDJS-only (base)ONbase activeTransmodal hub M_S — one of the sources of the win rate.
M5_D_PHONGRAPH_ENABLEDJS-only (base)ONbase activephonGraphMap co-decider at M5 — a source of the win rate.
F75_DAMASIO_ENABLEDJS-only (base)ONbase activeSomatic marker (reward bias, Damasio).
E_DEDOUBLE_ENABLEDJS-only (base)ONbase activeDoubled E service (observation/consolidation).
M4_M_CONTEXTUAL_ENABLEDJS-only (base)ONbase activeContextual letter penalty (mirror).
M4_M_HOMEO_V2_ENABLEDJS-only (base)ONbase activeHomeostasis v2 of letterPenalty.
M4_M_OS_MOD_ENABLEDJS-only (base)ONbase activeOS modulation of the letter penalty.
OS_GAP_RELATIVE_ENABLEDJS-only (base)ONbase activeRelative gap for the M5 temperature.
OS_SLEEP_DECAY_ENABLEDJS-only (base)ONbase activeDecay at "sleep".
M_S_DUAL_ENABLEDJS-onlyOFFto measureDual ortho/phon hub. Strong coupling.
M5_D_POSITION_AWARE_ENABLEDJS-onlyOFFto measurePosition-aware decision.
PUBSUB_ENABLEDJS-onlyOFFto measureInter-module pub/sub bus (R39 independence).
SLEEP_REPLAY_ENABLEDJS-onlyOFFto measureSleep replay.
M_HRR_CROSSMODAL_ENABLEDJS-onlyOFFto measureCross-modal HRR.
M_BPC_CROSSMODAL_ENABLEDJS-onlyOFFto measureCross-modal bPC.
COUCHE_A_ADAPTIVE_ENABLEDJS-onlyOFFto measureAdaptive A layer.
COUCHE_BC_SEPARATION_ENABLEDJS-onlyOFFto measureB/C layer separation. Strong coupling.

Note. At startup, only M4_PHON_USE_P ("φ · Croisement p") is ON; the reference config (§8) then switches on the "preset ✔" toggles. The heavily-coupled toggles (M_VOIE_PHON, M_OS_V07, M_BPC_M3D) touch many points in the code — their effect is not local.

7Lexique 4 dossier — the A2 toggle

In plain terms — why A2 is forbidden

A2 would let OMEGA consult the entire dictionary to guess. It would win more (~95–99 %), but that would no longer be guessing: it would be looking up the answer. Since the whole point of the project is to think without a dictionary, A2 is banned from letter choice — tolerated only to announce a word.

7.1 — What A2 is

L01_A2_M4_LEX4 (L01 ENH.) operates inside M4_ortho. From the cohort (dictionary words compatible with the pattern + exclusions), it scores each letter by its frequency among the candidates and injects that score into letter scoring — the estimator P(letter ∈ word | board), frequency-weighted. Reference model: the cohort model (Marslen-Wilson & Welsh 1978).

7.2 — Statistics

MeasureValueSource
Cohort-oracle ceiling, seen words98.7 % / 1.11 errdeclare e2e 31/05
Cohort-oracle ceiling, new words100 % / 1.14 errsame
Cobweb ↔ A2-presence correlation0.845 (vs IG 0.610)REPRISE_MASTER 25/05
Effect of A2 on the bPC couplingmakes the coupling −1 to −1.2 pt (redundant)REPRISE_MASTER 27/05

7.3 — Why A2 is excluded from scoring

A2 reaches ~98.7 % (seen) / 100 % (new) because it has the whole lexicon: a "new" word is never new to it (its cohort always contains the true word and converges on it). This is the oracle-shortcut OMEGA refuses. Its redundancy is measured (it absorbs Cobweb, corr 0.845; it makes the bPC coupling counterproductive). It carries the 95 % of the full config without cognition.

7.4 — What is allowed instead

A2 remains usable only for DECLARE (proposing a word, as a "teacher"), never as a letter-scoring engine. The cheat-free equivalent is M_DECLARE_DUAL (cohort of the board, not of the full dictionary): +5 pts in a cognition config, without reading the dictionary beyond what is board-compatible.

8Manual

8.1 — Launch

  1. Open OMEGA_v0_07_phase47…html in any browser: a self-contained monolithic application (code + lexicon inlined). No server, no dependency.
  2. Backup freeze OMEGA_v0_07_base.html: a stable state for rollback — do not touch it.
  3. Golden rule: the browser console is read-only. Every action goes through a UI button/toggle — never a command that would modify state (reproducibility).

8.2 — The interface panels

PanelButtons / fieldsUse
PENDU · Partie [Hangman · Game]▶ Start · +1 Tick · ▶▶ Auto · AbortPlay: random word, one move at a time (observe), full game, abort.
État Modules [Modules state] (Direct Circle / Mirror Circle)vectors, internal normsDiagnostic of the health of the representations (substrate, D↔M dissonance).
Toggles · Phase A + B2the 28 configuration toggles (§6)Compose the cognitive configuration (A4…θ, phon route, bPC, declare…).
Débranchable · triche grise [Disconnectable · gray cheating]A1 · Orthography · A2 · Lexique 4 · A3 · Word Lex4The lexical crutches, isolated. OFF in the reference config.
Performance Live + bPC santé [bPC health]📊 Mesure [Measure] (Mesurer A/B [Measure A/B]) · 🔬 Drivers · 🧬 Train θ · 📈 Sweep β · 🌊 θ online JSON · 🧹 Reset · Exporter JSON [Export JSON]Seeded A/B protocol + export; OS parameters; health of the 12 concept cells.
Bench (perf panel)▶ Bench R1 · Bench tick réel [real tick] · 🎯 Trexquant (hors-lexique) [out-of-lexicon]Trexquant mode — two forms. (a) Playable: the 🎯 Mode Trexquant toggle (NEO group) removes the drawn word from len_index on each New game (cohort/recall blinded) → you watch OMEGA solve true out-of-lexicon; the lexicon is restored on the next turn. (b) Bench: the 🎯 Trexquant button plays 80 out-of-lexicon words (warmup 300) and logs 2 win rates — phon→ortho cascade (with sound) vs ortho only. Both are self-contained (they restore the lexicon).
Route sublexicale · cognition apprise [Sub-lexical route · learned cognition]Dictée d'un mot aléatoire [Dictation of a random word] · Dictée sublexicale d'un mot [Sub-lexical dictation of a word]A separate dictation mode (the lexical version is gray cheating).
Pont bind · mesure (1024-D) [Bind bridge · measure]Mesurer (bind vs mélange) [Measure (bind vs blend)]Compares bound vs blended concept (z), separate buffer — does not affect the baseline.
Développeur / monitoring [Developer / monitoring]Smoke load · Smoke runtime (100 ticks) · Bench · Dump 14 canaux [Dump 14 channels] · Dump inventaire global [Dump global inventory] · initOmegaGlobals()Non-regression, throughput, channel/state inspection.

8.3 — Reference configuration (cheat-free cognition) — UPDATE 14/06/2026

Optimal preset re-measured on the current code, to be activated in 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 (+ its 4 guards)   [M_OS_LEARNING_ONLINE OFF: measured no gain + drift]
ON (declare NEO): M_DECLARE_NEO, M_NEO_RECALL, M_NEO_ASSEMBLED,
      M_NEO_COHORT, M_NEO_G2P_EXP (pen 0.5), M_DECLARE_DUAL (adopted 06/26)   (mute/trigger OFF; NEO_CONF 0.75, RECALL_MARGIN 0.20)
cheat-free OPTION WITHOUT currentWord (blue): + M_NEO_PHON_COHORT + M_NEO_PHON_COHORT_JOINTE → ~97.3 % (vs 97.5 % "word heard")
OFF: A1, A2, A3                                (gray cheating / crutch)
TO MEASURE: L01_B2_MOBIUS, M_IG_SELECT, M_IG_PSUCCESS ; M_NEO_OS_ARB (a clean alternative to DUAL, ≈ but does not beat it)

Measured win rate (in-lexicon, seed 12345, 120 words, warmup 150): cognition alone (base) 91.46 % (K=1) / 93.75 % (K=3) → +NEO (R+A+Cohort): 97.50 % (K=1) / 98.82 % (K=3) (4 seeds × 120, deterministic harness; cf. NEO notes + §17). Cheat-free, at the level of manual declare.

⚠️ NEO was absent from the old preset (31/05): without the NEO declarer you plateau at ~91-92 %. The NEO system (recall + assembled + cohort) is what brings cheat-free cognition to oracle level. No "1-click" preset in the UI: switch the toggles on manually (panels L01 + Declare NEO). UI colour cue (4 categories, UPDATE 06/26): left border green = optimal cheat-free config (to activate, including the adopted DUAL) · blue = non-default cheat-free option (board-derived sound, joint, OS arbitration) · orange = reads the SOUND of currentWord ("word heard": NEO assembled if the cohort is OFF, + emergent assembled) · red = dictionary gray cheating (A1/A2/A3, do not activate). NEO assembled flips orangegreen as soon as the blue "board-derived sound" is ON (it no longer reads the word's sound).
🧪 revealed g2p + penalty (adopted 14/06): the phon→graph table (assembled NEO route) now learns only from the revealed positions of the played word — the experience gained during the game — instead of the complete word at game end (learnExp vs learn), with a bounded penalty (0.5) on the wrong letters tried. Measured falsification: old g2p 98.9 % · revealed-only without penalty 98.3 % · revealed-only + penalty 0.5 = 98.9 % (= the old one). The old one did not cheat measurably, but the new one is doctrinally cleaner (it does not absorb the whole spelling) at no cost → adopted in the reference config.
Optimal cheat-free configuration — exact recipe to activate

The application starts with all toggles OFF (≈ 2.6 % if run as-is): you must activate the config below. A1 · A2 · A3 stay OFF — this is precisely what makes the game cheat-free: no dictionary lookup to choose a letter.

  • Cognition: A4 · A5 · A6 · φ Voie Phon (Phon route) · φ OS v07 · φ Croisement p (crossing p) · φ Substrat pur (pure substrate) · φ Feedback ↓ · bPC M3_d · Couplage readout (readout coupling) · Couplage readout φ · θ Apprentissage (Learning) + its 4 guards.
  • Cheat-free declaration: 🦴 Declare DUAL · 🧩 Declare NEO (master) · 🔁 recall · 🧬 assemblé (assembled) · 🎯 cohorte (cohort) · 🧪 g2p révélé (revealed g2p, pen 0.5).
  • Full cheat-free (without currentWord): 🔊 son board-dérivé (board-derived sound, 0.5) · 🔗 jointe son×ortho (joint sound×ortho, 0.3) — the sound comes from the consensus of the board cohort, no more reading of the hidden word's sound.

Measured result (in-lexicon K=1, 4 seeds, deterministic harness): ≈ 97.3 % full cheat-free (never reads currentWord). Benchmarks: ≈ 97.5 % if the assembled route reads the word's sound ("word heard" premise, legitimate in dictation), up to 99.8 % with DUAL; oracle ceiling (lexical lookup, excluded by doctrine) 98.7 %. The 🔇 muette (mute) · 🎚️ trigger · 🧭 arbitrage OS (OS arbitration) options are measured neutral (they do not change the result) — leave to preference.

8.4 — Measurement procedure (replicable)

  1. Apply the preset, fix the seed.
  2. +1 Tick to understand one move; Auto for a game; do not conclude performance from the interactive mode.
  3. Measure: seeded protocol, chained games (never reset between plays — L04), N ≥ 150 (≥ 2000 for long drift), 8 seeds for fine deltas.
  4. Read coverage and OS_diss as much as wins.
  5. Verify a new toggle's inertia OFF (byte-identical output) before judging its contribution.
  6. Export the JSON; compare A/B with z.
Pitfalls. The A→Z letter histogram is not a valid measurement oracle; protocol ≠ interactive; a cheap cognitive-win-rate proxy is contaminated by early declare-wins.

8.5 — Working discipline

  • Edits on a throwaway extraction (/tmp/_c.js); the saved build is never touched until a brick is validated.
  • Save = ZIP, on explicit order only; one at a time.
  • Inert OFF: every added brick leaves the baseline byte-identical when off.
  • Check the doctrine already accumulated before investigating (time has been lost rediscovering documented findings).

9Anti-cheat framework

Single criterion To obtain a piece of information, do you have to consult the hidden answer? Yes → oracle (forbidden in scoring). No (board + experience) → legitimate.
  • Legitimate: revealed letters, length, tried letters, everything learned by playing (bench of seen words, sound↔letter tables).
  • Gray cheating: enumerating the full dictionary to isolate the word (A2, full lexical cohort). Tolerated only to declare.
Lesson 79 (01/06) — the real anti-cheat mechanism

measured Phon route + bPC M3_d + emergent + g2p, ALONE = <60 %. Coupled with "scrambled phon → rate unchanged", this proves that no isolated route drives the decision. The win rate (~90 %) is emergent from the whole architecture (native M4_d + M_S hub + M_P + readouts + OS + mirror cascade + M1_m co-decider) — a hub-and-spoke / Triangle model.

The anti-cheat does not forbid information: it holds through the compartmentalisation of the loops — the bottom-up decides (on the revealed only), the top-down learns (the "teacher" is allowed to see the word, wake-sleep style) — plus the OS dilution, which neutralises any signal trying to pre-drive.

9.1 — The const ph = G.wp.get(currentWord) case

Reads the target word's phonology = a key→answer lookup. Its status depends on two factors: (1) regime — in Hangman (board-only) the word is not "heard" → hard cheating; in dictation the word is the input → legitimate; (2) destination — confined to P2/end-of-game learning/dictation → tolerated; fed back down into M4_d/M5_d → hard cheating. The "scrambled phon → rate unchanged" test: currently a latent, unexploited oracle. Rule: never wire it into Hangman scoring; for a cheat-free phon route, derive ph from the cohort (at the cost of the ~78 %).

9.2 — Cheat-audit procedure (reusable)

To test whether a source X is exploited by scoring: scramble/neutralise X and measure Δ(rate). If Δ ≈ 0, X is not exploited (a tolerated latent oracle); if Δ < 0 significantly, X pulls the decision (to be cut if X is an oracle). Judge a brick in the full system (ablation), never in isolated override.

10Operating regimes

Each mechanism dominates in the regime that supplies its input.

  • Poor context (Hangman, isolated word): shape prevails → phon→ortho and recall dominate. The lever for the last points = recall (recognising), not grammar.
  • Rich context (running text): grammar dominates (~92 %); the residue (silent endings) is lifted by grammatical category (POS) — on the silent -ent, uncertainty drops from 0.93 to 0.019 bit (−98 %, AQUA-type measurement).
  • Dictation (word heard): phonology is a legitimate input; phonemes + grammar surpass shape alone.

Consequence: in single-word Hangman, 100 % on a never-seen word is impossible cheat-free — this is the very definition of cognition vs oracle.

11Results: success & failure

11.1 — Success

  • Integration thesis confirmed measured: pure frequency ~22–23 % → cheat-free reference config ~90 % on the same hardened task. No isolated route carries this score (bricks < the whole; scrambled phon → rate unchanged).
  • Recall (seen words): 95.3 % / 1.33 err, within ~3 pts of the oracle (98.7 %) — VSA recognition approaches full lexical coverage without reading the dictionary.
  • Generalisation (new words): 54.7 % / 4.45 err by phon→ortho assembled decoding, without any recognition — honest, like a human facing an unknown word.
  • Effect of the learning fix (M_LEARN_FROM_COGNITION, 8 seeds): wrong phon target 20 %→0 %; mirror cascade MISS-frac 71 %→80 % of the healthy level (z=14.6).

11.2 — Failure

  • Profile of the losses (phon dyslexia) measured: across 100 losses, 96 % involve a phonetically close pair. Distance 0 (homophones I/Y) 5.8 %; distance 1 (voiced/voiceless P/B, T/D, K/G, F/V, S/Z) 58.3 %; distance 2 29.2 %; distance 3+ 6.7 %. Cause: voiced/voiceless pairs share 13/14 features → near-identical vectors.
  • Structural mirror ceiling: the cascade's contribution is capped by (1−winRate); at ~97 % the amountFactor drops to ~26 % (design F178, not a bug).
  • Weighted quality capped ~0.80 (max 0.84 OFF / 0.88 ON) vs target 0.90.
  • phonGraph inert: ‖Δ‖ ≈ 0 (sign-based learning → zero mean; cos ≥ 0.997 vs substrate).

11.3 — Honest assessment

Cheat-free cognition reaches ~90 % and approaches the oracle on seen words, but: (a) it plateaus below the oracle on new words (expected); (b) the residual losses are dominated by the unresolved voiced/voiceless phon confusion; (c) the M3_d concept cells (shape) are weakly connected to the hub (M3_d.output=0 under bPC) — but its reward-readout cLetterScore is a cheat-free contributor measured at +3.4 (§12; AUDIT_OMEGA §3.1): "M3_d weakly connected" holds only for the cells/hub, not the readout.

12State & limits

Ranked by impact × effort, each point framed as a falsifiable experiment. None degrades the baseline (everything is off/decoupled, byte-identical at rest).

PointImpactEffortFalsifiable experiment
M3_d cells weakly connectedthe readout, though, matters (inherited from v0.06: corr game↔win rate ≈ −0.15; v0.07: 7-9 cells/12, 1 plural concept, M2→M3 projection = permutation, not true HRR compression; cells = shape code)Low*LowDONE (17/06): A/B M_BPC_READOUT_COUPLE → the cLetterScore readout matters = +3.4 cheat-free (8 seeds, never below; AUDIT_OMEGA §3.1). Still weak = the cells (shape/hub); debugging the internals = optional (the readout already carries the value).
Phon dyslexia (96 % of losses, voiced/voiceless pairs)HighMediumActivate M_PHON_CORRECTION (α=0.10 / β=0.05) at scale; measure the drop in dist≤2 losses.
Truncated phon route (M2_phon_m/M1_phon_m absent)HighHighBuild the missing mirrors (predictive coding); measure the phon contribution.
B1 — M3_d.output not normalised (inherited from v0.06: norm ~1.76, saturates M_S ~1.46; inert while bPC sets output=0)MediumLowB1 remains inert (output=0 under bPC); the reconnection that would have activated it is falsified (12-cell capacity wall — familiarity lives in the bench). No urgency.
Unbounded Hebbian (α_Hebb/α_decay = 8)MediumLowBound it; measure norm stability over 2000 games.
B3 — k/tries score wrong on a loss (inherited from v0.06)MediumLowFix the formula; re-check the scores of lost games.
LDIM→SDIM bijective (zero info gain, R42-#9)MediumMediumRandom projection (Achlioptas 2003) vs removal; measure the info gain.
Reproducibility (Math.random not seeded) fixed phase46Cross-cuttingresolvedFix#1: picker + bench → omegaRand() (deterministic headless). Only the intentional fallback remains if not seeded.
Centre bias (M2 Mexican-hat grid)LowMediumSymmetrise/normalise the grid.
P2/Möbius disconnected (the name PIPELINE2_MVP is misleading)LowHighConnect P2 gradually; verify inertia OFF then the contribution.
M3_d — reoriented, NOT dead (update 17/06/2026). The earlier "closed case" was win-rate-centric and wrong (cf. doctrine §0 + AUDIT_OMEGA §3/§3.1). The concept (12 cells) = a shape latent whose real contribution is the reward-readout cLetterScore (coupled 0.20): measured +3.4 pts of win rate cheat-free (without A2; A/B 8 seeds, never below zero; reproduces the "+2 to +3 stripped"). It is redundant/harmful only WITH A2 (lexical oracle excluded by doctrine) — hence the old "flat contribution", measured in a full config. Still falsified (bounded scope): lodging the episodic bench in M3_d / the concept→M4 path (−1.3 to −2.0, M3D_reconnexion_banc_FALSIFIE) and familiarity (AUC 0.64 K=12 → lives in the bench; episodic and concept kept separate by design). The cells encode shape (reusable on the dictation side — an early-stage signal, §0).

Recommended order: (1) purge non-seed Math.random done (phase46 · Fix#1); (2) hand-coded PHON_TO_LETTERS → learned L2 table done — the NEO/emergent assembled route, L2 learned board-derived (§17); (3) lodge the recall bench in M3_d falsified — measured net-negative (concept→M4 contaminates, −1.3 to −2.0); capacity probe: carrying familiarity requires K≈N cells (= the bench), 12 cells AUC 0.64 vs bench 0.98 → familiarity lives in the bench, M3_d stays the small semantic latent (§17); (4) bound the Hebbian + fix the bijective projection to do.

13Open research questions

Exploratory hypothesis: would freely-tuned cognition converge toward the self-dual point (α=1, β=1), the invariant of the arbitration law? Status: exploratory hypothesis, no causal link established; a numerical coincidence is not a proof.
  • θ → (α=1, β=1)? Does the OS, learning on its own (🧬 Train θ), fall back on the analytic dosing?
  • Route ratio r ≈ 5.35? Does the ratio signal_phon / signal_ortho (≥ 1000 games) approach 5.353?
  • Fraction of dormant channels ≈ 0.079?
  • Ortho/phon asymmetry: intrinsic or learned? Does a symmetric init diverge spontaneously?

To become scientific, each correspondence would need a mechanism that predicts the constant from the cognitive setup — otherwise the result remains an analogy.

14References

Status: structural/active · present but inactive · not implemented.

Dual-route reading & dyslexias — Coltheart et al. (2001) DRC (structural); Plaut & Shallice (1993); Castles & Coltheart (1993), Adlard & Hazan (1998) voiced/voiceless confusions (validated: 96 % of losses).

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). Structural (M_S).

Loops, prediction, mirror — Hinton et al. (1995) wake-sleep; Bogacz (2025) predictive coding; Hesslow (2002) simulation (P2); Hong & Friston (2021) DMN/TPN.

Learning / plasticity — Hebb (1949); DeSieno (1988); Bardes, Ponce & LeCun (2022) VICReg; Turrigiano (1998, 2008), Zenke (2013); Moraitis et al. (2021) SoftHebb.

Decision / information — Lindley (1956) InfoGain; Fisher (1987) Cobweb; Sutton & Barto (1998); Friston (2025) Active Inference (inactive); Dehaene (1998)/Baars (1988) GNW (inactive).

Cohort / reading in context — Marslen-Wilson & Welsh (1978) cohort model (basis of A2); Hale (2001), Levy (2008), Smith & Levy (2013) surprisal; Jacobs et al. (1991) Mixture-of-Experts.

Vector representation — Plate (1995) HRR (SDIM=1024); Rachkovskij & Kleyko (2022); Achlioptas (2003) random projection (not implemented); Schmidhuber (2003) OOPS (inactive).

Similarity — Kriegeskorte (2008) RSA (internal dissonance measure 1−cosine).

15Glossary

TermDefinition
Ortho / phonWritten / spoken form of a word.
SAMPAPhoneme notation (distinguishes é/è/an/on…).
Concept / M_S hubAmodal representation linking the routes (enter through one, reconstruct the others).
bPCPredictive auto-encoder of the concept (M_BPC_M3D).
Bottom-up / top-down (mirror) loopPerception-decision / correction-learning.
P1 / P2Direct / mirror circle (double Möbius). P2 currently disconnected.
OSArbitration module (doses ortho/phon, dilutes, measures dissonance).
CohortDictionary words compatible with the board.
CoverageFraction of positions correctly revealed.
DeclareOverride: announce a word/a letter.
RecallRecognition of an already-played word.
Cheat-freeNever consults the hidden answer.
Gray cheatingInjection of the dictionary's frequency/spelling into the letter score (A1/A2).
Oracle / key→answer lookupReading the hidden answer (wp.get(currentWord)).
HDC / HRRHyperdimensional computing / Holographic Reduced Representations.
Cap §43 / R66Read only the revealed / no default activation without empirical validation.

16Appendices

16.1 — Ablation table (measured effects)

Toggle / fix (UI name)Measured effectN / seedsConfigSource
M_BPC_READOUT_COUPLE Couplage readout+1.8 to +4.2 pts (increasing)2000, 3 seedsstrippedREPRISE_MASTER 27/05
same in a full config−1 to −1.2 pt (A2 redundant)fullsame
M_DECLARE_DUAL+5 ptscognitionDECLARE 31/05
M_EMERGENT_DECLARE (recall)95.3 % seen / 54.7 % newbench 400, 150+150DECLARE e2e 31/05
M_LEARN_FROM_COGNITIONphon target 20 %→0 %; MISS-frac →80 % (z=14.6)8 seedsreferenceMESURE_FIX 31/05
M_PHON_CONCEPT_BIND≈ blend (z ≈ −0.95)referencestep 2 audit
M_BPC_DECLARE 🎯 Declare BPC97.25 % cumulative vs 94.31 %long horizonRem configMANIFEST / phase36
A2 (cohort-oracle) excluded98.7 % seen / 100 % neworacleDECLARE 31/05
M_DECLARE_NEO (R+Assembled+Cohort) cheat-free97.50 % (K=1) / 98.82 % (K=3)4 seeds × 120strong cognitionNEO 03/06 (§17)
M_NEO_MUTE + trigger (gap 0.005)neutral: Δ +0.00 (K=1) / +0.14 (K=3)4 seeds × 120+ R+A+CNEO 03/06 (§17)

16.2 — Quick reference of constants

5 M1_d sub-brains, phases [0,103,207,311,415], LDIM=512 · 16 M2 zones (4×4), EMA 0.05, σ 1.5/4.0 · 12 M3_d cells, α_Hebb 0.008, α_decay 0.001, threshold 0.005, SDIM=1024 · M4_d 70/30, top-10 · M5_d T 0.05–0.5, gap×20, M1_m weight 0.1 (F198) · reward +1/−0.5/+2/−1 · anti-Hebbian 0.004.

17Declare NEO (phase 46)

A new emergent and crossed declare added additively on top of phase45: recall (addressed) + assembled (phon→ortho) + cohort (board filter) + mute (via sound, crossed) + trigger. OFF-inert (byte-identical baseline), none of the 5 existing declares modified, bPC M3_d allowed but NEO is not M_BPC_DECLARE. Current build OMEGA_v0_07_phase47_trexquant_mode.html (engine = phase46).

17.1 — The NEO toggles (UI)

UPDATE 06/26: 3 cheat-free blue toggles added (board-derived sound · joint · OS arbitration) + M_DECLARE_DUAL adopted in the reference config (§8.3, §17.5). UI colour code: green optimal config · blue optional cheat-free · orange reads the SOUND of currentWord (word heard) · red gray cheating (A1/A2/A3).

UI nameDefaultRole
M_DECLARE_NEO_ENABLED 🧩 Declare NEO · maître [master]OFFMaster; all NEO routes inert while it is OFF.
M_NEO_RECALL_ENABLED 🔁 NEO · recallON*Addressed: VSA recall from the revealed board + the bench of lived words. 100 % on repeated vocabulary, inert on a new word.
M_NEO_ASSEMBLED_ENABLED 🧬 NEO · assemblé [assembled]ON*phon→ortho masked: decodes the sound positions via L2[phoneme]. w.p legitimate, masked align (hidden grapheme → UNI). Generalises to a new word.
M_NEO_COHORT_ENABLED 🎯 NEO · cohorte [cohort]OFFBoard-derived filter: allows a letter only if ≥1 word compatible with the revealed pattern carries it. Prunes misses.
M_NEO_PHON_COHORT_ENABLED 🔊 NEO · son board-dérivé [board-derived sound] blueOFFAdded 06/26. The decoded SOUND (assembled+mute) comes from the phonemic consensus of the board-compatible cohort (words of the same length matching the revealed), instead of wp.get(currentWord) → removes any reading of the hidden word's sound = full cheat-free, without currentWord. Purity guard M_NEO_PHON_COHORT_PURITY (0.5) against a confident-but-wrong override. Measured (§17.5): parity with true-sound in-lexicon, OOV cost ~7 pts. When ON, the assembled route goes orange→green (it no longer reads the word's sound).
M_NEO_PHON_COHORT_JOINTE 🔗 NEO · jointe son×ortho [joint sound×ortho] blueOFFAdded 06/26. Replaces the argmax of the board-derived sound with the JOINT Σ_φ Pcoh(φ\|p)·CR[φ\|revealed neighbours] (the _neoCRS table learned top-down) — "crossing = joint", memoir §6. Measured in-lexicon K=1, 4 seeds: +2.2 pts vs argmax, never below (independent repro: +2.5). Own threshold M_NEO_PHON_COHORT_JOINTE_CONF 0.30. Requires board-derived sound ON.
M_NEO_OS_ARB 🧭 NEO · arbitrage OS (2 voies DRC) [OS arbitration (2 DRC routes)] blueOFFAdded 06/26. Replaces the routes' either/or cascade with an OS convex blend — sub-lexical (joint) ⟷ lexical (frequency-weighted cohort) — via the reused M_OS_v07_step (μ=r^α/(β+r^α), forced α=β=1 neutral, decoupled from the reading θ). A true interactive DRC. Measured without currentWord, 4 seeds: +2.0 vs base, never below, ≈ DUAL (within the noise) but cleaner and ~2× faster. Not adopted (alternative) — §17.5.
M_NEO_G2P_EXP_ENABLED 🧪 NEO · g2p révélé + pénalité [revealed g2p + penalty]OFFLearns the phon→graph table (assembled route) from the revealed positions only + a bounded penalty (M_NEO_G2P_EXP_PEN 0.5) on wrong letters, instead of the complete word (learnExp vs learn). Strictly cheat-free; measured = the level of the old g2p (98.9 %).
M_NEO_MUTE_ENABLED 🔇 NEO · muette [mute]OFFVia sound: silent positions predicted by a crossed (joint) phonogram head-phoneme × offset × revealed neighbours.
M_NEO_TRIGGER_ENABLED 🎚️ NEO · triggerOFF(B): the mute overrides only if cognition is uncertain (M5_d.output.gap < 0.005).

* sub-flags active only if the master is ON. Numeric parameters (NEO_CONF 0.75 · MUTE_CONF 0.85 · TRIGGER_GAP 0.005 · RECALL_MARGIN 0.20) at their measured defaults, not yet tunable in the UI; M_NEO_G2P_EXP_PEN (0.5) is tunable (the "pén" [pen] field of the revealed-g2p toggle).

17.2 — Cheat-free (verified line by line)

RoutecurrentWord accessStatus
Recall_emrg_bind(currentWord, revealedMask); .charAt(p) compared only if revealedMask[p]revealed only
Assembledwp.get(currentWord) (legitimate input) + align(…, revealedMask) maskedno leak
Cohortrevealed pattern + lexicon by length; excludes tried-absent lettersboard-derived
Mutehead-phoneme (masked align); neighbours charAt(p±1) only if revealedMask[p±1]revealed only
Diag. counterscurrentWord.indexOf(proposed) under typeof _neoDbg !== 'undefined'inert (build)
Learningcomplete word (neighbours, alignment) in endCurrentGametop-down

The only access to the "complete" hidden word: w.p (pronunciation) = a legitimate input (proto-language premise, M4_PHON_USE_P); the masked align blocks any leak of an unrevealed grapheme. A1/A2/A3 remain gray cheating OFF.

17.3 — Crossing ≠ multiplying

The mute crosses sound and ortho — it neither adds them (dual log f + wO·ortho + wP·phon) nor multiplies them. Crossing = joint P(letter | head-phoneme, offset, revealed neighbours) with backoff.

  • Resonator networks (Frady 2020): "do not multiply blindly" (decoding a bound product = hard combinatorial search).
  • bind = a code retrievable by word (the recall's role: 0 dead cells, ×6 generalisation, 100 % retrievable). It is not the letter engine: on the global dictionary, bind = 19 % vs EM 64 % (frozen spec, capacity wall).
Measured · model (board 50 %, new words, top-1 position): ortho only 26.8 % · head-phon 21.2 % · crossed joint 51.6 %. Crossing ~doubles each marginal.

17.4 — Results measured

Deterministic headless harness (reseed before init → bpcW; _omega_OSL_reset; M_OS_v07.α/β=1), strong-cognition cheat-free config, 4 seeds × 120, paired Δ + z.

ConditionK=1K=3
base (cognition only)91.46 % ±0.8693.75 % ±0.46
R + Assembled + Cohort97.50 % ±0.5998.82 % ±0.38
+ Mute 0.85 (no trigger)Δ −0.63 (z=−1.0)Δ −0.28 (z=−1.1)
+ Mute + trigger gap 0.005Δ +0.00 (z=0.0)Δ +0.14 (z=0.8)

Win-rate lever = Recall + Assembled + Cohort (manual-declare level, cheat-free). The trigger takes the mute from −0.6/−0.8 to ≈ 0: it no longer drags.

Brick-by-brick contributions (Δ vs base): recall +1.76 (K=3; 100 % on lived, inert on a new word) · assembled +5.28 (K=1) / +3.43 (K=3) · cohort +0.50 (K=1) / +0.17 (K=3; hit 96.7→98.3 %).

17.5 — UPDATE 06/26 — cohort without currentWord, DUAL adopted, OS arbitration measured

Full detail + reproductions: AUDIT_OMEGA.md §1.1–§1.6. Summary:

Regime honesty (orange). The 97.5 % cheat-free rests on M_NEO_ASSEMBLED reading wp.get(currentWord) = the sound of the word ("word heard" premise). This is legitimate in dictation, but in Hangman it reads a property of the answer → flagged orange in the UI. Benchmarks without this premise: OOV phon→ortho ~70.7 %, pure ortho OOV ~22 %.

Board-derived cohort + joint (full cheat-free, without currentWord). M_NEO_PHON_COHORT derives the sound from the board-cohort consensus (no more wp.get(currentWord)). Measured cost: ~0 in-lexicon, ~7 pts OOV (purity guard 0.5). The joint sound×ortho (_neoCRS, crossing = joint) beats the argmax by +2.2 pts on every seed (K=1, 4 seeds).

cheat-free declare (in-lexicon K=1, 4 seeds)win rateerrmoves
cohort-joint only (without currentWord)94.8 %2.138.18
+ DUAL (adopted) — word cohort, freq×ortho×phon97.3 %1.807.88
+ OS ARBITRATION (alternative, not adopted)96.8 %1.897.95

DUAL adopted (§8.3): a word-level declare (a naive-Bayes word model, not the per-letter crossing governed by §6/§3.1 → no breach), cheat-free (board + length, never currentWord), +1.8 → 99.8 % word-heard / +2.5 → 97.3 % without currentWord, stable. Caveat: in-lexicon recognition → neutral OOV. OS arbitration: the only *principled* mechanism that beats the base (+2.0, a true interactive DRC via M_OS_v07_step), but does not beat DUAL → kept OFF-inert as a clean alternative.

Directionality (safeguard). The cognition's phon route is ortho→phon (sounds out the revealed letters — reading), the OS arbiter has a reading-tuned θ; the declare is phon→ortho (spelling, Hangman's strength). A bidirectional DRC coexistence; but the declare-level OS arbitration must force its own α=β=1 (done) so as not to inherit the reading θ — otherwise the routes' senses conflict.

Falsified (do not redo, R66): end-distance morphology (−1.0) · dense-backoff morphology (+0.3 noise) · cross-modal crossing at the M3_d concept (−3.0, capacity wall) · word-joint (−2.3) · frequency crossed at the phoneme (−4.3). The cheat-free residue lives in the cohort ambiguity, not in the phon→letter table nor the concept.

17.6 — Reservations hypothesis / to do

  • Mute neutral with the trigger, not a lever: an irreducible silent residue, already covered by cognition. Alive and harmless.
  • Trigger: SPSA on the gap = flat (constant win rate → no gradient; effect below the measurement quantum). A dense per-decision reward (advantage [mute∈word] − [cognition∈word]) would be needed to learn it online.
  • NEO numeric parameters not yet tunable in the UI (only the 6 toggles are).
  • Power 4 seeds × 120; R66 suggests ≥ 200 × 4 to tighten (stable directions).

17.7 — UPDATE 06/2026 — honest OOV, the n-gram route, and the cognitive "C" measured

⛔ OOV retraction + the real lever (detail: AUDIT_OMEGA §1.6.1–§1.12 · config: docs/CONFIG_TOGGLES.md)

(a) Cohort leak. The earlier "~97 % out-of-lexicon" was a leak (the _neoWBL cache was not invalidated: the "removed" word stayed in the cohort). Fixed. True OOV ≈ 33 % (pure sub-lexical generalisation); cognition alone ≈ 11 %. Cognition does not generalise sub-lexically; the OOV lever is the aggregation of the lexicon's structure.

(b) N-gram route (new toggles). M_NEO_LETTER_NGRAM (a pre-computed positional n-gram, cheat-free) ≈ 57-66 % OOV; M_NEO_OS_ARB_NGRAM wires it in as the sub-lexical route of the OS arbitration (auto-switch: in-lex ~97 % / OOV ~60 %, single config); M_NEO_NGRAM_GAP (nearest revealed neighbour d=1..4) adds +2 pts OOV (~63-65 %, SOTA band) = the 1st cognitive gain > substrate. All OFF by default (R66).

(c) The learned "C" — falsified as a breakthrough. The light C (maxent/GATE/POE) and the heavy C (transformer, the M_NEO_C_HEAVY hook OFF-inert) were built and measured: the heavy one converges toward the gap-aware n-gram without beating it (win rate at optimal config: parity, OOV Δ ≈ −1.3; trained on real games = a regression from lexical coverage). The gap-aware n-gram (free, interpretable) remains the practical ceiling — "cognition > oracle = light/interpretable" confirmed. Design of a future organ (a learned arbitration hub): docs/COGNITION_DESIGN.md.

OMEGA-Ω — reference report & manual. A consolidation of three iterations (plain-language explainer 01/06, loops audit 01/06, v0.07 report) by Claude (Anthropic), directed by Rem. Snapshot as of 03/06/2026 — addendum 14/06/2026: derived application = diagnostic dictation (dys), see dictee/; addendum 18/06/2026: grammar lever + dyslexia corrector + dual-route grammar (Lexique 4 cgram), §18; deployment = compressed embedded lexicon (gzip+base64, browser ≥ 2023), build phase47 (declare NEO + Trexquant mode added — §17). Convention measured/design/hypothesis/excluded. Every toggle mentioned carries its UI name. Doctrine: strict cap §43 · R66 (measure before activation) · cognition > oracle.

UI names, button labels, panels and boot defaults verified on the phase45 build (tooltips included); the 6 NEO toggles verified on phase46 (§17). Still indicative (from docs/memoir, not re-verified line by line): the mapping of the internal F-codes and the detail of the constants. The measured figures are dated and sourced.

18Diagnostic dictation (dyslexia application)

Goal. A derived application targeting written-language disorders (dys), built on the engine's phon↔ortho dual route. The engine diagnoses the type of each spelling error and steers the training. Details & reproducible measurements in dictee/ (JOURNAL, README — which includes the closed audit + the falsified M3_d —, CORRECTEUR, GRAMMAIRE_DOUBLE_VOIE).

Frame = SENTENCE dictation. Measured: on isolated words, 84 % of words have homophones (mostly inflectional) → undecidable from sound alone. The sentence provides context: since the target word is known, homophones and agreements become gradable errorswithout M3_d (the experiment "M3_d disambiguates homophones" was falsified at design: M3_d encodes ortho/sound, with no meaning/context input; cf. dictee/README.md § "Falsifié M3_d").

Error families (dysorthographic typology: phonological · lexical-surface · semantic/morphological), multi-label:

  • accent (é/è/ê) · voiced/voiceless (p·b, t·d, k·g, f·v, s·z) · inversion · silent letter · extra letter
  • homophone (a wrong homophone spelling) · agreement (an inflectional homophone decided by context) · surface (a "plausible-but-wrong" spelling detected by a phonetic normaliser: leson→leçon, bato→bateau)
  • omission / extra word (Levenshtein alignment of target vs student words)

Remediation. A persistent error profile (by family); sentence selection prioritises the most-missed family ("we're working on: agreement"). We do not stop at diagnosing: we steer the training.

UI. An additive, OFF-inert panel (an IIFE — it does not alter the Hangman engine; baseline intact, R66 doctrine): the ✍️ Dictée diag (Diagnostic dictation) button (bottom-right) → difficulty choice, spoken dictation (fr-FR synthesis), sentence entry, per-word feedback coloured by family + revealed correction, profile + reset.

Data. Lexique 4 (New et al. 2026, lexique.org, CC BY-SA 4.0): 30 graded sentences (dictee/sentences.json) + a full homophone index (43,580 groups). Measured (synthetic, 30 sentences): recall 100 % on accent/agreement/homophone/omission, surface 17/17.

18.1 Grammar lever — agreement in context

The sentence context makes agreements gradable. The lever (in diag_sentence.py) covers: subject-verb agreement (the governor via function words, measured 94 %), distant subject (skip_pp skips the prepositional group: "le ver de la terre creuse"), past participle (être → subject agreement; avoir → invariable except a fronted direct object "la pomme qu'il a cueillie"), NP gender (gendered determiner + the noun-head's lexical route), and the disambiguation of noun/verb homographs by context ("le lit" vs "elle lit", 5/5). The diagnosis also locates a developmental stage (Ferreiro/Berliocchi: phonological → alphabetic → lexical → morphosyntactic, 4/4).

18.2 Dyslexia corrector (applied outlet)

The same lever, turned around without a reference answer (the corrector does not know the target → it infers intent), yields a grammatical-homophone corrector: a/à, son/sont, on/ont, leur/leurs, -é/-er, peu/peux/peut, ce/se, et/est. 0 false positives on the battery (the cardinal property sought: never "correct" text that is right) — but requalified (06/2026): measured on 16,342 genuinely correct sentences (UD French), the real FP was 6.0 %, brought down to ~2.5 % by 5 batches of FP-safe hardening (invariable/adverb stoplists, capitalised/non-noun-head gender, distant plural subject, irregular participles, homograph-nouns via cgram); permanent guard dictee/fp_stress_test.py. The dys domain (short sentences) is lower, not 0. Detection: 22/24 in corpus, 12/15 held-out (new vocabulary → the rules generalise). Unique angle: it corrects + locates the stage (dys remediation), which no mainstream corrector does. UI: the 🩹 Correcteur (Corrector) button — paste your text, errors underlined, click = apply the correction, stage shown, readable font. Honesty: gender agreement in the corrector was attempted then set aside (measured FP-unsafe: almost all adjectival forms are also nouns in Lexique4 → a POS/tagger is needed; the lexical gender route remains, safely, in the diagnosis).

Re-validation on a corpus of REAL errors (update 02/07/2026) — WiCoPaCo. The UD audit tests on correct text; it misses the FP that only appear on structures absent from UD. Running the corrector on WiCoPaCo (LIMSI, GFDL — corrections mined from the FR Wikipedia revision history, ~45k error→correct pairs with context), two results. (a) Invisible FP fixed: 3 classes of false positives from the old homophone rules, invisible on the curated UD — on/ont at the start of a clause ("On dit…"→ont) and on a relative/coordinated plural subject ("…qui ont commis", "X et Y ont…"→on), a/à before a feminine participle -ée ("à durée limitée"→a, whereas after avoir the participle does not agree → -ée=noun), gender "un son stéréo"→sa (a possessive preceded by an article = a homograph noun). Fixed by abstention guards (FP-safe: they invent no correction, they remove them). (b) Recall lever: classifying the misses by morphological type, the cleanest seam is the missing mirror of noun agreement — a singular determiner glued to a plural noun ("le camps", "un soucis") is always an error in correct French → the accord singulier du nom (singular noun agreement) rule, FP=0 by construction (+435 real corrections; 3 learned guards: number-screen "le 25 mars", non-noun homograph "le savons" verb, -s/-x invariants that no runtime resource distinguishes). Second lever: participle agreement after être with a NOUN subject ("le niveau … est estimée"→estimé, "les cristaux sont composées"→composés) — rule_pp_etre only covered pronoun subjects; a noun-subject branch was added via the same NP-head parser (_np_subject). More FP-prone (subject identification is hard → 9 UD flags on the first pass, ~5 of them real FP), brought to FP=0 on correct text by 4 measured guards (elided pronoun "qu'elle soit emmenée", postposed/inverted subject "est annoncée la reprise", subject >5 tokens from the aux, proper noun between subject and aux) — +405 real corrections. This is the territory of the adjective-gender once set aside (§ above): held FP=0 this time thanks to the POS-tagger + _np_subject + guards. Third lever: -er/-é/-ez endings (existing rule) widened by three measured FP-safe governors — être participle ("a été fabriquer"→fabriqué), reflexive clitic skipped to reach the true governor ("veut se séparé"→séparer; le/la/les excluded as ambiguous with the determiner: "la cité"=noun), causative "faire + infinitive" ("fait déclaré"→déclarer) — +57 corrections. Fourth lever, the most notable: ATTRIBUTIVE adjective agreement ([article + noun + adjective] → gender×number, "les domaines industriel"→industriels) = the adjective-gender once set aside (§18.2, "for lack of a POS/tagger"), re-opened now that we have the tagger: a naive prototype = 60 FP on 2500 correct sentences → brought to 1 (a real error) by five measured guards (ADJ∧NOUN tagger, pure lexical gender, number read on the article and not the noun's -s [otherwise "mois/cursus" invariants], invariants/proper-noun/distributive-coordination/fixed/epicene excluded) — +114 corrections; modest recall because the tight guards that give FP=0 exclude the rest (the FP-safe ceiling of adjective-gender in red; beyond that = green vigilance). WiCoPaCo campaign tally: ~960 real corrections gained, 3 FP fixed, zero FP added. Lesson: FP=0 validation requires, after the correct text (UD), a corpus of real errors (the FP hide in the structures the clean text lacks). All in 3-engine parity (parity_corr.js / parity_core.js); WiCoPaCo data not redistributed.
Confronting a REAL dys corpus (update 03/07/2026). WiCoPaCo = Wikipedia writers, not dyslexics. An authentic dys corpus (78 texts: one schooled dyslexic adolescent + 71 dys-dysorthographic adults; analysis Bodard 2020, RÉCITAL) reframes the priorities. Real distribution of dys errors: phonetisation ≈43 % (wrong grapheme/silent letter + phonetically-close substitution), agreement/conjugation ≈27 % + homophones ≈11 % = 38 % grammatical, segmentation ≈6 %. Above all: 59 % of errors have the same phonetics as the correct form (67 % when simplifying vowels) and 53 % produce a real word (contextual analysis indispensable). Two lessons: (1) the phonetic channel is the biggest dys lever — its "modest" contribution measured on WiCoPaCo (+2 pts) was an artefact of the Wikipedia corpus, not a dys truth — which validates our hand-made phonetic key; (2) the grammar campaign (38 % of errors) aims right. First lever drawn from the real corpus: elision merge, a dys class absent from Wikipedia — a glued non-word [elision letter]+[word] ("lhopital"→l'hôpital, "dargen"→d'argent, "cetait"→c'était) restored (accents included), safe prefixes l'/d'/j'/c'/s' only (m'/t'/n' excluded: "metre"=mètre≠m'être); elision FP on UD 10→7 (net gain, thanks to the "c' before e/i" guard), vigilance tier. Dys corpus not redistributed.

18.5 Sources (corrector & dys)

Typology of dys errors (FR) — Bodard J. (2020), Spécificités des erreurs d'orthographe des personnes dyslexiques : analyse d'un corpus de productions écrites, JEP-TALN-RÉCITAL 2020 (source of the ≈43 % phonetic / 38 % grammatical / 6 % segmentation distribution and of the dys corpus used); Plisson A., Daigle D. & Montésinos-Gelet I. (2013), The Spelling Skills of French-Speaking Dyslexic Children, Dyslexia 19(2), DOI 10.1002/dys.1454 (base typology); Antoine J.-Y. et al. (2019), Ma copie adore le vélo…, TALN 2019, HAL hal-02375246; Sitbon L., Bellot P. & Blache P. (2007), Traitements phrastiques phonétiques pour la réécriture de phrases dysorthographiées, TALN 2007, HAL hal-01321119.

Spelling correction & dys (other languages) — Damerau F. (1964), A technique for computer detection and correction of spelling errors, CACM 7(3), DOI 10.1145/363958.363994 (edit distance); Pedler J. (2007), Computer Correction of Real-word Spelling Errors in Dyslexic Text, PhD thesis, Univ. of London; Rello L., Baeza-Yates R. & Llisterri J. (2014), DysList: An Annotated Resource of Dyslexic Errors, LREC 2014; Brill E. & Moore R. (2000), An Improved Error Model for Noisy Channel Spelling Correction, ACL 2000 (a learned error model, tested in §measurements and set aside); Wilcox-O'Hearn A. (2014), Detection is the central problem in real-word spelling correction, arXiv:1408.3153 (the real-word wall: detecting the subject, not correcting it — frames the OS agreement of §18.4).

Corpora & lexicons (licences) — WiCoPaCo: Max A. & Wisniewski G. (2010), Mining Naturally-occurring Corrections and Paraphrases from Wikipedia's Revision History, LREC 2010, GFDL (grammar validation corpus, ~45k pairs; not redistributed); Lexique: New B., Pallier C., Brysbaert M. & Ferrand L. (2004), Behavior Research Methods 36(3), DOI 10.3758/BF03195598 (frequencies, gender, POS); Universal Dependencies French-GSD (CC BY-SA, at-scale FP guard fp_scale_probe); Catach N. (1986), L'orthographe française, Nathan (graphemes/morphograms). The dys corpus (FFDys, Dys ASEI platform) stays private (personal data, never redistributed).

18.3 Lexique 4 → cgram & dual-route grammar

build_cgram.py extracts from Lexique 4: 12,415 verb forms (the corrector's coverage), 53,050 unambiguous-gender nouns (the lexical gender route), a high-frequency subset embedded in the app (the <script id="vdc-lex"> block) and the adjectival pairs. The grammar then follows OMEGA's signature architecture (GRAMMAIRE_DOUBLE_VOIE.md): a dual route (lexical cgram × sub-lexical rules, crossed as a joint §3) and a dual loop (bottom-up = decide; top-down = learn from known targets — descending_probe.py learns the gender lexicon from usage: 100 % precision, FP=0, but data-bound: its value comes from volume = real corrected copies).

Sentence Hangman — falsified as a lever (update 18/06/2026). Testing agreement inside Hangman: sharing letters reveals the endings "for free" → the "errors" metric cannot reward it, and on the engine (words ≥7) the DECLARE gain is marginal. The value of sentence-cognition is in declaration and the short-word regime — that is, the corrector, not Hangman. Bench & measurements: evo/PHRASE_HANGMAN_PROBE.md.

18.4 Typing aid, learning loop & deployment update 24/06/2026

Green "vigilance" layer (update 30/06/2026). A second underline level (dotted green, app + extension) flags confusable words — homophones and paronyms (~80 groups curated from Lexique 4, CC BY-SA), with options + a meaning gloss. It does not assert an error → outside FP=0 (the assertive red stays in flags ⊆ Python parity). The distributional (meaning) signal, too noisy to correct, is finally useful here: it orders the options and softens the mark when context confirms the written usage — it never pushes another form (measured: "il porte une paire de lunettes" must not be "corrected"). Single source: dictee/build_confusables.js; candidate miners build_confusables_auto.py / paronyme_miner.py (the auto version is too noisy → curation).

Être/avoir, capitalisation, run-on (update 30/06/2026). Four additions in 3-engine parity on the No. 1 dys error (être/avoir) and punctuation/case: (1) être↔avoir usage 🔴 — "il est faim"→a, "il a allé"→est, "on est 10 ans"→a (closed lists: avoir idioms, intransitive être verbs, age — never a blind swap; abstain otherwise). (2) misspelled auxiliary 🔴 — "vous ete"→êtes, "nous avon"→avons (edit distance toward the agreed form; the FULL_AUX guard = all valid forms, "aurait" never touched; abstain if être↔avoir is ambiguous). (3) capitalisation 🔴 — a lowercase word after . ! ? → capital; never the 1st token (fragment); abbreviation guard ("M. dupont"). (4) run-on 🟢 (vigilance) — two pronoun+verb clauses glued together ("il mange ‖ il dort") → "missing punctuation?" without imposing (meaning depends on it → dissociated from red). Conservative: anti-inversion ("dit-il"), anti-coordination/relative. All on a segments layer (punctuation/capitals = boundaries), which also stops the subject from crossing a period/comma. FP=0 measured (CI guard recall_probe). Ref: dictee/correcteur_probe.py.

At-scale FP=0 audit & re-tiering (update 30/06/2026). The first FP=0 test on 14,450 correct sentences (UD corpus — any flag = an FP; never done before, the 30–95-sentence batteries did not see it). Verdict: 4.70 % FP. (1) Regression eliminated: misspelled aux 241→0 FP ("ne"→a), capitalisation 180→35 ("L. casei", ellipses, decimals). (2) Grammatical homophones decided by GRAMMAR (not a demotion to green: these are errors with a syntactic role — a=verb vs à=prep, on=subject vs ont=verb…). The FP came from precise gaps, filled with the machinery: segments layer ("qui, à 4°C" no longer crosses the comma), auxiliary frame "a/ont + participle" (reconstructed infinitive checked in the verb lexicon → rules out -é nouns), glued pronouns ("qu'ils"), inversion ("avait-on"), son/sont rewritten on what follows + a plural determiner, sentence-start guards ("Mais…") and proper noun ("et Bob"). é/er (a -é noun guard) and SV agreement (an aux+participle guard) hardened. Result: red 4.70 % → 1.73 % (homophones in red, part of which are real errors: "la mode à largement contribué"→a). The rate is now locked in CI by dictee/fp_scale_probe.py (a ceiling on 2500 correct sentences). Lesson: the UD scan is the real FP=0 test.

Full audit & application by confidence (update 03/07/2026). A cross-checked multi-agent audit (8 subsystems, 78 findings → 47 confirmed + 26 minor) was followed by a fix campaign (PR #57-#66): (1) application by CONFIDENCE — the source text is never rewritten; the correction is shown separately; the safe corrections (FP=0) and spelling candidates (~79 % precision measured on real dys) are applied by default, each word = an undo/reapply toggle; the orange stays on click. (2) Replacement quality locked in CI: a frequency-dominance guard on ranking ("une tres bonne note" no longer becomes "trés", "jamai" no longer "jamal"), capital preserved ("Ecole"→"École"), typographic apostrophe ’ normalised (mobile), "silent final letter" promoted ("dehor"→dehors, FP=0 on 2,500 UD). (3) Delivery guarded in CI: extension zip freshness-checked (it was 53 commits behind), service worker probed (precache reshape → real offline on Cloudflare despite the 308s), POS-tagger finally loaded in the extension, non-destructive contenteditable. (4) Pedagogy: 4 wrong messages fixed (elided governor "l'automne", nominal -ons "maisons", V.CV syllabation, stage aggregated per session). (5) OMEGA·KEY v0.19: generated↔imported key interop repaired, peer seed validated, zero external requests. Current FP-scale: 2.04 % (CI ceiling 3 %).

The real-word agreement wall, cracked — subject OS arbitration (update 07/2026). The real-word agreement error (the verb stays a valid word but wrongly agreed: "les enfants joue", "les rapports que l'entreprise livrera") is, in the literature, the central problem of the corrector (Wilcox-O'Hearn, §18.5): deciding it requires recovering the syntactic subject, often out of reach ("de N" complements, coordination, distant subject). The red agreement parser (_np_subject) abstains there by construction — which is precisely what holds its FP=0. Measured: no subject route alone crosses this wall (nearest-noun 81 %, coherence LM 74 %) and the hard combinations (sum of scores, product of marginals, gate) flood — two routes out of three permanently support "the word is correct", diluting the one reliable vote. What cracked it, exactly the lesson "crossing = arbitrating by reliability, not adding": the Hangman's OS arbitration — a convex blend of subject-routes weighted by reliability (the peakedness of each distribution, μ = r/(1+r)), with a baked language model (~180 KB, UD-GSD held-out, build_os_lm.py) carrying the confidence gradient that makes the threshold useful. On the "de N" residue the parser gives up on, confident OS arbitration recovers the subject's number at ~94-97 %, where no single route could. Shipped as orange vigilance ("agreement to check", never rewrites → the red FP=0 stays intact), in 3-engine parity, guarded in CI (dictee/parity_os.js). Validated on the real chat register (real dys, not formal UD): flood 0 % on chat, 0.04 % on varied text, recall 54 % of number disagreement — after re-inheriting the structural guards of the sibling rules (participle, compound tense, pronoun-subject, elided subject "l'X") that kill the passé-composé FP. A real-word wall reputed impassable for a portable tool (no dependency parser, no large LM) — crossed by the same arbitration geometry as Hangman.

And part of the wall falls in red — the non-adjacent subject (update 19/07/2026). OS arbitration lives in orange because a neighbouring noun-subject cannot be told apart from a complement for certain. But a family of cases can be decided affirmatively, at FP=0 — the principle (formulated by Rem): the subject is read elsewhere than just before the verb. Four screens, four red rules: (1) coordinated verb — "les chats mangent et dort"→dorment, the sibling verb carries the number of the shared subject (rule_accord_verb_coord); (2) object-relative — "les enfants que je vois joue"→jouent, the antecedent carries the number, a finite verb embedded separating the relative from the completive (rule_accord_rel_obj, extended to the dont/ anchors always relative); (3) parenthetical — "les livres, malgré leur prix, reste chers"→restent, subject and verb in the same clause cut by a comma-parenthesis, anchored on the plural determiner at the head of the clause (rule_accord_incise). Each rests on an audible signal (the plural "les/des" heard when the verb mark is silent) and a net that rules out false friends (homograph noun-verbs, invariable colours, enumerations). 0 FP on 2,500 UD sentences + batteries of tricky traps (comparatives, completives, "de N" complements, enumerations). The boundary stays honest: the general subject-complement ("la couleur de la voiture") remains orange — but the structurally recoverable part goes red. The bare imperative ("arrives plus vite"→arrive) was set aside, measured undecidable (imperative vs elliptical "tu arrives").

Hunting "raw" false positives & lexical completeness (update 19/07/2026). On difficult correct sentences (formal/colloquial registers, Certificat Voltaire-style traps), several FP invisible on clean corpus: perception/factitive participle + infinitive = invariable — "se les était vu confisquer"→vue (the guard existed for avoir, was missing for être; + causative "fait"); invariable colours/materials — "des gants crème", "bleu marine" were no longer taken for verbs (the _INVAR_COLOR set, 48 words); quantifiers — "la plupart du temps suffit" (number read on the complement, not forced plural), "nombre de spécialistes doutent" ("nombre" is not an infinitive-subject). A conflict/liaison audit of the pipeline (all rules instrumented per token, 2,500 UD: 0 disagreement; span merge: 0 overlap) lifted one last orange FP: the plural vigilance proposed "les chats mangent"→mangents (mistagged verb) and "yeux marron"→marrons (colour) — fixed. On the lexicon side: the Wiktionary outlet (46k kaikki entries CC BY-SA) is confirmed in production — SP.WORDS 214k words ("unknown word" flood −56 %), gender 21,903 nouns (including +56 slang terms finally injected: crush, docteuse), POS inherited; the IPA is still extracted but measured-refuted as a correction key (dys errors are an approximate phonetics — a faithful key over-distinguishes). All in 3-engine parity, at-scale FP=0 guard (1.5 % on 2,500 UD, CI ceiling 3 %).

Typing aid (completion). The corrector is also a real-time typing aid: for the word under the cursor it offers a completion (longer words sharing the prefix, sorted by frequency and accented: recev→recevoir, télé→téléphone) in addition to the correction. Accents are restored via the speller's lexicon (OMEGA_LEX4 is deaccented — Hangman plays without accents): an embedded, offline solution. Outside the parity scope: a completion is a UI suggestion, not an FP=0 flag (the flags ⊆ Python invariant is not concerned).

Learning loop. A unified dys profile (DysProfile) aggregates the error families of both writing surfaces (dictation = supervised rate, known target; corrector = counting during composition). It drives an adaptive word selection in the dictation — a weighted draw over several weaknesses (no longer only the single most-missed family), with a variety threshold (≈ 45 % free draws + anti-repetition, never 3× the same family in a row) so as not to demotivate — and displays a progress curve per family. Hangman stays out of the loop: guessing letters (on a deaccented word) does not exercise writing — an assumed category error.

Three engines & deployment. The same corrector runs in verified parity across three engines (Python reference correcteur_probe.py ↔ app ↔ browser extension dys-core.js; invariant flags ⊆ Python, FP=0, tested in CI). The monolithic app (Hangman + dictation + corrector, all included) is installable and offline (PWA). Roadmap & status: DICTEE_ROADMAP.md; timeline: dictee/JOURNAL.md; UI: the 🩹 Correcteur (Corrector) and ✍️ Dictée diag (Diagnostic dictation) buttons in the app.

18.6 Voice input — route A (web) & route B (local research) update 31/07/2026

The real dys need for voice is to BE ABLE TO SPEAK (bypass the keyboard), not to be corrected afterwards. Two routes, one deployed, the other relegated to research.

Route A — Web Speech + OMEGA (deployed on the site & the extension). webkitSpeechRecognition (the browser's voice service, Google) returns text all lowercase, with no punctuation → OMEGA re-dresses it automatically: capitals (sentence start + after . ! ?), red FP=0 correction applied on its own (reversible), Copy. Prosodic punctuation measured — we open the mic ourselves in parallel (Web Audio AnalyserNode, zero model): silence (RMS energy) decides a comma (~190 ms) / a period (~600 ms), the pitch rise (F0, autocorrelation) places the "?" (≥ +4 semitones). An indispensable complement: a lexical question cue, because qu- questions (" en sommes-nous", "comment ça va") fall in pitch — prosody alone misses them. No voice punctuation command (saying "virgule"/"point") — too many false positives (the word may genuinely be dictated: "un point c'est tout") → it would break the text. Honesty (cf. the scoped promise, §0.5): the audio goes to the browser's voice service (opt-in checkbox, OFF by default, explicit notice); the corrector itself stays 100 % offline.

Route B — OMEGA's phonetic route as an ASR back-end (research, closed). "As we correct the text, we can correct the sound" (Rem): a free acoustic model (wav2vec2-french-phonemizer, MIT) outputs phonemes, the dual route phon↔ortho does the rest, zero Google. Measured arc measured (clean voice, 147 words): raw p2g 13.6 % → +trigram grammar 49.7 % (+36 pts — grammar dominates, as in rich context) → +exact homophones (inverse index 116k) 63.3 % → +the speller's 214k lexicon & fuzzy pronunciation recovery 70.1 % → +the red corrector 72.8 % → +the subject parser in confidence mode (gender flips allowed: spoken homophones, free) 76.9 %. On a real (dys) voice the chain holds 81 % — better than clean TTS. Prosodic punctuation = F1 100 % (silence at word boundaries, free in wav2vec2) and pitch→"?" confirmed on a real voice (questions rise: +4 to +17 semitones; 0 false "?"), which synthetic TTS could not show (prosody stripped).

Route B negative results falsified (do not retry). (1) Bigger LM = WORSE — a full UD-GSD+WiCoPaCo LM (191k trigrams, ×240) lowers 81 %→79 %: the Wikipedia register pulls toward rare words (chères→père, proposer→opposé) = frequency traps; the small os_subj_lm wins because its rarity does not interfere. (2) OS arbitration (μ=r/(1+r)) for ASR = worse under real noise — its "robustness" measured before was an artefact of synthetic noise; down-weighting the emission of a reliable acoustic model hurts. (3) Lexicality filter = +0 — the bad choices are real rare words, not non-words (a selection problem, not a lexicality one). Cause of the ceiling: the residue = a wrong real word on a mis-heard sound = the acoustic model, not OMEGA. OMEGA is a decoder/LM, not an acoustic model.

Verdict measured: for a LOCAL tool, Whisper wins; for the web, OMEGA still makes sense. Whisper small locally (faster-whisper, CTranslate2 int8, open MIT weights — not Google) = 98 % (52/53) on the same real voice, punctuation + capitals + "?" included (even qu- questions) — and the OMEGA corrector on top has "nothing to correct". The phon route (81 %, decoding + prosody + pitch→?) remains the research proof (the same cognitive dual-route, repointed from the keyboard to the mic), superseded for use. But Whisper is too heavy for the browser: on the web, OMEGA's value on voice lives in route A (client-side re-dressing + prosody). Detail: dictee/ASR_VOIE_B.md, dictee/asr_voix.py; UI: the site's Voice input page (in French) + the extension panel.

Substrate generality — what the mechanism is, at bottom (O2, 06/2026). Pointed outside French (at code, without Lex4), the aggregation substrate reconstructs and compresses sequences as well as French (~1.1 bit/character below chance) and nothing on a scrambled sequence — "to predict = to compress". OMEGA's transferable core is therefore a compressor of structured sequences, domain-agnostic; the French cognition (phonological dual-route) does not transfer (no "sound" in code). Powerful and general, but structure capture, not understanding. (Group work O1 = negative, subsumed by internal arbitration.) Detail: recherche.html, evo/EVO_ROADMAP.md, scripts evo/evo_o2_*.js.

Limits (honest). Validation still synthetic + held-out — no real student copies (field validation with speech therapists / online FR corpus fetch_gec_corpus.py = to do; they validate and feed the top-down loop). The corrector's verb coverage via whitelist + cgram (homographs: cross against context). Gender agreement — measured on real UD (dictee/gender_probe_ud.py, 355k gold words): the determiner is validated and improved (recall 67→73 %, FP 0.10/1000 — verb-homograph guard lifted, wired in parity across the 3 engines, battery FP=0 intact); the adjective is rightly disabled (3.37 FP/1000) — a POS-tagger would remove only ~48 % (→ 1.76/1000, still ~20× the determiner), because adjectival agreement requires scope (noun-head, extent) = parsing, not just a tagger. Approximate "surface" normaliser.