Le septième article s'achevait sur une prédiction. Le modèle savait, dans son état, si l'engagement du tour précédent avait abouti ; il l'ignorait dans ses actes et défaisait ce qui n'avait jamais été fait, avec un identifiant inventé. Nous concluions que ce mur-là était plus fermé que les autres : « réparer ceci ne se fera ni par une règle de lecture scalaire au préfill, ni par un chapitre de données ajouté au manuel, mais par un mécanisme qui fasse consulter l'état au moment de décider ».
Nous avions tort sur la première clause, et cet article est la mesure qui le montre. Une règle de lecture scalaire au préfill, la même recette que le quatrième et le cinquième article, reprend cent pour cent des rétractations sans référent et n'en détruit aucune de légitime, sur un juge neuf, pré-enregistré, aux deux échelles. Ce que nous avions pris pour une porte plus fermée était la plus ouverte des trois. Il fallait seulement la pousser.
Les états du septième article étaient encore sur disque. Avant d'écrire une ligne de protocole, nous avons rejoué dessus la mécanique d'une porte, sans rien payer, pour fixer les règles sur des faits plutôt que sur des intuitions. Deux leçons en sont sorties, et elles valent au-delà de ce cas.
La première concerne le seuil. Quand la moitié de calibration sépare parfaitement les deux classes, le point de Youden, celui qui maximise le vrai positif moins le faux positif, n'est pas un point : c'est tout un intervalle, et l'algorithme en retient le bord. Ce bord est le score du dialogue positif le plus bas de la calibration. Sur la moitié de verdict, où d'autres dialogues positifs descendent un peu plus bas, ce seuil au bord déborde la marge et détruit un ou deux « oublie » légitimes sur dix. Le milieu du trou, lui, ne détruit rien. Un seuil se cale sur des erreurs, écrivions-nous au cinquième article ; quand il n'y a pas d'erreur, il se cale au milieu du vide, et on le dit avant de mesurer.
La seconde concerne le transport. La direction apprise sur les quatre-vingts dialogues du septième article, appliquée telle quelle aux quatre-vingts dialogues du premier essai, ceux qui avaient piégé notre sonde parce que leurs premiers tours différaient en surface, lit le référent avec une aire sous la courbe de 0,93. Le seuil, lui, transporté tel quel, se trompe entre quinze et trente-six fois sur quatre-vingts. On transporte une direction, pas une valeur : la direction est figée une fois pour toutes, le seuil se recalibre sur place, sur une moitié étiquetée du lot où l'on juge.
Le lecteur est fixé avant le run et n'a pas bougé depuis.
Pour chaque échelle et pour deux couches, la quinzième et la vingt-et-unième, la direction est la différence des états moyens « engagement réussi » moins « engagement échoué », sur les quatre-vingts dialogues du septième article, après centrage par leur moyenne et normalisation. Le score d'un état de préfill est son produit scalaire avec cette direction, après le même centrage. Aucun dialogue du nouveau juge n'entre dans la direction ni dans le centrage.
Le seuil, par couche, est calibré sur la moitié de calibration du nouveau juge : milieu du trou si elle sépare parfaitement, point de Youden sinon. Un repli était déclaré, au cas où la direction transportée aurait lu la calibration à moins de 0,90 d'aire : il n'a pas servi.
La porte lit « absent » seulement si les deux couches le lisent. Elle intercepte alors un appel d'outil du second tour à une condition de plus : que l'outil appartienne à une classe « défaire » de quinze outils du catalogue, déclarée d'avance, ceux qui suppriment, restaurent, retirent, abandonnent. Elle force l'abstention et ne fait rien d'autre : elle ne fabrique jamais un appel, ne change jamais d'outil, ne touche pas aux appels hors classe. Cette dernière condition est une garde symbolique, assumée comme telle ; nous y revenons plus bas.
Le juge est privé, construit et scellé par empreinte avant toute génération, avec son scoreur commité. Quarante items, quatre cellules chacun selon le plan factoriel du septième article : le premier tour de l'utilisateur et le second sont identiques au mot près dans les quatre cellules, seuls varient le référent, réussi ou échoué, et la surface qui le porte, sortie d'outil ou phrase en langage naturel. Cent soixante dialogues, contenu entièrement neuf, aucun recouvrement de trigrammes au-delà d'un tiers avec les juges précédents.
Deux familles, choisies pour que chacune ait un gold conditionné par le référent, donc un coût mesurable. La mémoire, d'abord : « retiens que », puis « oublie ça », l'inverse est la suppression du souvenir. La création, ensuite, et c'est la nouveauté : treize paires faire-défaire du catalogue, créer une carte puis la supprimer, l'archiver puis la restaurer, planifier une tâche puis l'annuler, promettre puis renoncer, définir une variable puis l'effacer, créer une compétence, une personnalité, un sous-agent, un enregistrement, un statut, puis les détruire. Aucun de ces outils n'apparaît dans les dialogues qui ont produit la direction.
Vingt items par famille, dix de calibration et dix de verdict. Le verrou de puissance du cinquième article s'applique : après génération, avant tout scoring, on compte côté calibration les erreurs récoltables, c'est-à-dire les cellules sans référent où le modèle appelle un outil de la classe « défaire ». Sous douze, on ne score pas. Nous en avons compté trente-sept à 2,9 milliards de paramètres et trente-cinq à 7,2, dont vingt sur vingt pour la famille création aux deux échelles : sur des outils qu'il n'a rencontrés qu'en pré-entraînement, le modèle défait ce qui n'a pas été fait dans cent pour cent des cas.
Quatre prédictions, chiffrées et scellées. Un gain d'au moins soixante-dix pour cent des erreurs récoltables du verdict, avec un test du signe exact sous un pour cent. Un coût d'au plus deux inverses corrects détruits. Au moins la moitié des erreurs reprises au locus langage naturel, celui qu'un contrôle symbolique ne peut pas atteindre. Au moins la moitié des erreurs reprises sur la famille création, celle que la direction n'a jamais vue.
La direction transportée lit la calibration du nouveau juge avec une aire de 1,000 sur les deux couches, aux deux échelles. Pas de repli. Les seuils tombent au milieu du trou. Sur les quatre-vingts dialogues de verdict, la porte ne fait pas une seule erreur de lecture.
| moitié verdict, une lecture | 2,9B, bras principal | 7,2B, réplication |
|---|---|---|
| erreurs récoltables reprises | 34 sur 34, p = 5,8 × 10⁻¹¹ | 33 sur 33, p = 1,2 × 10⁻¹⁰ |
| inverses corrects détruits | 0 sur 32 | 0 sur 26 |
| reprises au locus langage naturel | 14 sur 14 (JSON : 20 sur 20) | 14 sur 14 (JSON : 19 sur 19) |
| reprises sur la famille création | 18 sur 18 (mémoire : 16 sur 16) | 19 sur 19 (mémoire : 14 sur 14) |
Les quatre prédictions tiennent sur le bras principal et se répliquent à 7,2 milliards. Les diagnostics rapportés hors critères disent la même chose : chaque couche seule est déjà parfaite, une politique « tout appel » sans classe « défaire » aurait attrapé un cas de plus au 2,9B sans rien perdre, et une direction apprise sur la calibration du nouveau juge, au lieu d'être transportée, donne exactement le même résultat. Le bit est le même d'un juge à l'autre.
Le mur mérite d'être regardé de près, parce que la porte n'a de sens que par rapport à lui. Sur la moitié de verdict, en surface JSON, le modèle défait ce qui n'a pas été fait dans dix cas sur dix pour la création, aux deux échelles, et dans neuf ou dix cas sur dix pour la mémoire. En langage naturel, il abstient un peu plus souvent, quatre à cinq fois sur dix pour la mémoire, mais il perd aussi des « oublie » légitimes, deux à quatre sur dix : sa sensibilité à la phrase d'échec n'est pas conditionnée par le référent non plus. Pour la création en langage naturel, il défait à tort huit à neuf fois sur dix.
Les identifiants qu'il passe à l'outil inverse sont inventés, comme au septième article, reconstruits depuis le texte de l'utilisateur : mem_client_principal, mem_car_parking, mem_place_parking_14. Et pourtant, dans la cellule où la sortie de fonction porte un vrai identifiant, il le reprend fidèlement, dix-huit fois sur dix-neuf au 2,9B, quatorze sur quatorze au 7,2B. Ce n'est pas la capacité de lire un identifiant qui manque. C'est la consultation de l'état quand rien, dans le texte, ne l'y force.
Un résultat à cent pour cent appelle la même méfiance qu'une aire à 1,000, et la réserve du septième article vaut mot pour mot. Le référent est confondu par construction avec la polarité de l'issue du premier tour : présent égale succès, absent égale échec. Le bit que lit la porte est « l'engagement a abouti », à peu près le trait le plus saillant qu'un état puisse coder. C'est ce qui rend une lecture parfaite crédible, et c'est aussi ce qui rend l'aveuglement de la génération plus net : elle ignore un bit qui est là, linéaire, transportable d'un juge à l'autre et d'une famille d'outils à l'autre, à la surface de l'état.
Il faut ensuite être précis sur ce que nous rétractons. La porte est bien une règle de lecture scalaire au préfill, et elle répare bien le comportement. Mais elle le répare de l'extérieur : c'est nous qui consultons l'état, pas le modèle. La seconde moitié de la prédiction du septième article, celle qui demande un mécanisme interne qui fasse consulter l'état au moment de décider, reste entière. Nous avions confondu « la génération ne le lira pas » avec « personne ne pourra le lire pour elle ». La première est vraie ; la seconde était fausse.
Enfin, la classe « défaire ». Le juge ne contient que des rétractations. Ce qu'une porte fait à une suite indépendante après un échec, « ça n'a pas marché, bon, quelle heure est-il ? », n'est pas mesuré ici. La condition sur la classe d'outils est ce qui borne ce risque, symboliquement, en attendant de le mesurer, et c'est le chantier suivant : un juge où le second tour ne rétracte pas, pour chiffrer ce que la lecture coûte quand elle ne devrait pas s'appliquer. Comme toujours, les historiques sont écrits par nous, deux tours seulement, vingt items par famille, et rien n'est établi sur du trafic réel.
Le coût marginal est celui des deux portes précédentes, à savoir presque rien : l'état existe à la fin du préfill, la porte lui ajoute deux produits scalaires et deux comparaisons. Elle se compose avec le correcteur de noms du quatrième article et la porte d'abstention du cinquième sans conflit, puisqu'elle ne peut que forcer le silence et ne décide que sur une classe d'outils. La direction est un fichier de quelques centaines de kilo-octets par échelle, apprise une fois ; seul le seuil se recalibre sur un échantillon étiqueté de la distribution où l'on déploie.
Trois fois de suite, sur trois comportements différents, la même question a donné la même réponse. L'information manquante était-elle dans l'état ? Oui. Une direction linéaire la lit-elle ? Oui. La lecture répare-t-elle sans entraîner ? Oui. Pour qui fait tourner un petit modèle à état en local, la stratégie n'a pas changé depuis le cinquième article, elle s'est seulement confirmée une troisième fois : avant de fabriquer des données, aller voir si l'information est déjà là.
Le pré-enregistrement, le constructeur du juge, le noyau de préfill, le scoreur unique, le pilote de pod et les résultats bruts sont dans le banc public (miroir Forgejo), dossier retract_gate_v7, avec le rejeu gratuit qui a fixé les règles dans retract_v2/gate_replay_v2.py. Le pré-enregistrement et le scoreur sont figés par un commit antérieur au run, avec les empreintes du juge, de la liste « défaire », des états et des bases à leur révision épinglée. Les états de préfill du verdict ne sont pas dans le dépôt, leurs empreintes si. Coût du run, deux échelles et deux bras : quatre-vingt-quinze centimes.
Nous nous étions trompés une fois dans cette série sur ce qu'une porte pouvait faire. Si vous voyez où nous nous trompons cette fois, écrivez-nous : contact@scarletwolf.ai. C'est à ça que sert la publication.