Deux façons d'écrire le même article — et la preuve des hallucinations

gauche : harnais (sourcé) droite : modèle local qwen3:14b même sujet · mêmes faits de départ
Le modèle local a reçu les chiffres + la consigne « ne pas inventer ». Résultat : il a fabriqué des commandes. Surligné en rouge = inventé/faux.
4commandes inventées par le modèle
0commandes inventées par le harnais
21tests dispatcher (preuve réelle)
35tests vfg-coder (preuve réelle)

◀ Harnais / vérificateur (moi)

Rapport adossé à des commandes rejouables. Chaque affirmation cite la commande qui la produit.

Comparateur de modèles

Preuve : powershell -File tests\run-tests.ps1 → 21 OK

18 modèles catalogués, gabarit HTML autonome (0 <script src>), build qui valide l'autonomie et le JSON verbatim.

Banc benchmarks/runner.py

Preuve : python benchmarks/runner.py local → Status: fail partout

100 % d'échec : délègue en ollama -Mode write, refusé par la gate. Écrit aussi des fichiers en effet de bord.

Sonde d'identité

Preuve : results/sonde-identite-*.json

~0 % fiable : deepseek-v4.1-flash se dit « Claude », mistral-large-3 se dit « Llama-3.1-8B ».

Routage & Node

Preuve : Select-String ROUTING.md 'claude|codex|kimi' → 0 ; node -v → v24.19.0

ROUTING.md a effacé 3 lignes d'agents (pas « supprimé des modèles »). Node est passé v22→v24.

Conclusion

Le verdict vient d'un runner. On cit la commande, on ne la fabrique pas.

▶ Modèle local (qwen3:14b) — article produit

« L'Agent Local VFG Évalué par la Mesure » — author: Bionic · status: pub

Structure correcte (mesuré / déduit / leçon / conclusion). Mais il cite 4 commandes qui n'existent pas :

❌ benchmarks/comparator.py --models 18 --no-external
→ n'existe pas (le vrai : scripts\build-model-comparator.ps1)
❌ python benchmarks/runner.py --all
→ mauvais drapeau (le vrai : python benchmarks/runner.py local)
❌ tools/identity_probe.py --models deepseek,mistral
→ n'existe pas (le vrai : scripts\invoke-model-probe.ps1)
❌ git diff --ROUTING.md
→ commande invalide
❌ « ROUTING.md a supprimé 3 modèles » → faux : des lignes ont été effacées, aucun modèle n'existe dans ce fichier.

Ce qu'il a de bien

Le plan, le français, et il reprend la leçon fournie (« verdict = runner »). Il ne l'a pas inventée : elle était dans la consigne.

Pourquoi ça arrive

Sans accès aux fichiers, un modèle invente des preuves plausibles — même avec « ne pas inventer ». C'est le point exact prouvé par sa propre sonde d'identité.

Face à face

CritèreHarnais (moi)Modèle local
Source des chiffrescommandes rejouablescommandes fabriquées
Commandes inventées04 (+ 1 fait faux)
Accès aux fichiersoui (lecture réelle)non (texte seul)
Peut publierouinon (à faire par un humain/harnais)
Qualité rédactionnellecorrecte, densefluide, meilleure prose
Verdictrunnerauto-affirmé

Ce que ça prouve

Le modèle local écrit mieux ; le harnais dit vrai. La bonne combinaison : le modèle local rédige, le harnais vérifie chaque commande avant publication. C'est exactement le rôle de vfg-coder (worktree, outils exécutés par le script, verdict par runner).