ddcafc58c0
Investigation: les 6 marqueurs canoniques #9/#10 existent en ≥4 endroits. Hypothèse « (c) renderer._CANONICAL_MARKERS + (d) l'oracle du test sont des copies non gatées → dériver de model.CANONICAL (source unique) ». RÉFUTÉE par ./run_ci.sh (check-readme-claims RED): la 2e moitié du gate ast.literal_eval STATIQUEMENT ces 2 listes et les set-diffe vs CLAUDE.md → déjà gatées. Et surtout: check_canonical() PROUVE que le rendu (bâti DEPUIS model.CANONICAL) émet chaque valeur; le dériver de CANONICAL rend le contrôle tautologique (vert vacux). EXCEPTION à fix-vs-gate-transitively-protected-constant (qui vise les copies PASSIVES; un oracle d'enforcement est ACTIF, sa duplication EST le test). Revert intégral des 2 éditions (test byte-identique). Seul survivant: +5 lignes de commentaire remontant la raison (indépendance de l'oracle) au site de code, autrement enfouie dans le script CI. Sortie inchangée (commentaire pur), check_artifacts byte-identique. run_ci 33 PASS 0 FAIL 0 SKIP · 0 artefact reconstruit · 0 gate ajouté (#5) · 0 chiffre inventé (#6) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>