{
 "format_version": "1.0",
 "_doc": "Les résultats établis du projet : l'énoncé tel qu'il est écrit (ou SANS SOURCE), la valeur lisible par une machine, le référent (id de data/referents.json), le script qui le reproduit, et la ligne exacte qu'il imprime dans un journal déposé sur Zenodo. Lis-les plutôt que de les recalculer ; si tu les recalcules, compare ta sortie à la ligne du journal déposé, toutes lignes sauf la dernière (la durée). statut : verifie_journal_depose = la ligne est dans un journal déposé dont une copie, à l'empreinte déposée, est dans ce dépôt (tools/check_resultats_etablis.mjs la relit à chaque CI) ; verifie_journal_local = pas de journal déposé, mais un journal d'exécution est versé dans docs/journaux/ avec l'empreinte du script qui l'a produit ; le contrôle relit les lignes et échoue si le script a changé depuis ; verifie_ci = pas de journal déposé, mais le script du dépôt qui imprime la ligne échoue si le résultat ne tient pas, et la CI le lance à chaque passage ; releve_journal_depose = la ligne est dans un journal déposé, relevée par Anibal, mais le journal n'est pas encore dans ce dépôt ; affirme = aucune ligne imprimée dans un journal déposé. Un résultat conditionnel porte ses branches, chacune avec sa condition et ses preuves.",
 "statuts": {
  "verifie_journal_depose": 9,
  "verifie_journal_local": 8,
  "verifie_ci": 18,
  "releve_journal_depose": 4,
  "affirme": 2
 },
 "resultats": [
  {
   "id": "code-c8",
   "intitule": "C₈ : 1152 régions, code [1152, 13, 288]",
   "enonce": {
    "texte": "On $C_8$ the sixteen family figures span a code $[1152, 13]$ whose minimum distance is $288$, attained by a single word, and these parameters do not depend on the parity convention. On $C_1$ the minimum distance is $36$ and the dimension is $12$ if figures carry the polarity the rule gives them, $11$ if a reference region is required to be light.",
    "langue": "en",
    "source": "Axes and Level Sets (doi:10.5281/zenodo.22965031), notes/paper1.md, Theorem 6",
    "copie": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/notes/paper1.md"
   },
   "valeur": {
    "longueur": 1152,
    "dimension": 13,
    "distance_minimale": 288,
    "mots_de_poids_minimal": 1
   },
   "conditionnel": false,
   "referents": [],
   "donnees": [
    "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/catalogue-axes.json"
   ],
   "script": {
    "chemin": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.py",
    "adresse": "https://anibal-amiot.com/docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.py",
    "depose": {
     "enregistrement": "23101285",
     "fichier": "verif_paper1.py",
     "md5": "d0ec9edab883ab262bc0e006c7400391"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22965031",
      "enregistrement": "23101285",
      "fichier": "verif_paper1.log",
      "md5": "9ceccf258dffdf6d7518d9fba2a00c49",
      "copie": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.log"
     },
     "lignes": [
      "       rang des familles 13 ; [1152, 13] dmin 288 ; mots de poids min 1"
     ]
    }
   ],
   "statut": "verifie_journal_depose"
  },
  {
   "id": "code-c1",
   "intitule": "C₁ : longueur 144, distance minimale 36 ; dimension 12 ou 11 selon la convention de parité",
   "enonce": {
    "texte": "On $C_8$ the sixteen family figures span a code $[1152, 13]$ whose minimum distance is $288$, attained by a single word, and these parameters do not depend on the parity convention. On $C_1$ the minimum distance is $36$ and the dimension is $12$ if figures carry the polarity the rule gives them, $11$ if a reference region is required to be light.",
    "langue": "en",
    "source": "Axes and Level Sets (doi:10.5281/zenodo.22965031), notes/paper1.md, Theorem 6",
    "copie": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/notes/paper1.md"
   },
   "valeur": {
    "longueur": 144,
    "distance_minimale": 36
   },
   "conditionnel": true,
   "branches": [
    {
     "condition": "les figures portent la polarité que la règle leur donne (sans ancrage)",
     "valeur": {
      "longueur": 144,
      "dimension": 12,
      "distance_minimale": 36
     },
     "preuves": [
      {
       "journal": {
        "depot": "10.5281/zenodo.22965031",
        "enregistrement": "23101285",
        "fichier": "verif_paper1.log",
        "md5": "9ceccf258dffdf6d7518d9fba2a00c49",
        "copie": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.log"
       },
       "lignes": [
        "       sans ancrage (polarite de la regle) : rang 12"
       ]
      },
      {
       "journal": {
        "depot": "10.5281/zenodo.22986529",
        "enregistrement": "23101928",
        "fichier": "codes_cles.log",
        "md5": "fc4b5897636db120c4f237a56f51a03a",
        "copie": "docs/sources/2026-10-01/one-object-v8/codes_cles.log"
       },
       "lignes": [
        "== C1: clés 72, rang 43, clés nulles [('H', -6.0), ('V', -6.0)]; rang familles 12; d_min 36; mots de poids min ['T0 YANG MUT + T1 YIN', 'T0 YANG + T1 YIN + T1 YANG', 'T0 YANG + T1 YIN MUT + T1 YANG MUT + T2 YANG + T2 YANG MUT', 'T0 YANG MUT + T1 YIN MUT + T1 YANG + T1 YANG MUT + T2 YANG + T2 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN MUT + T2 YIN + T2 YIN MUT + T3 YIN + T3 YIN MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN MUT + T1 YANG + T2 YIN + T2 YIN MUT + T3 YIN + T3 YIN MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG + T2 YANG MUT + T3 YIN + T3 YIN MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN + T1 YANG + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG + T2 YANG MUT + T3 YIN + T3 YIN MUT', 'T0 YANG + T1 YIN MUT + T1 YANG MUT + T2 YANG + T3 YANG', 'T0 YANG MUT + T1 YIN MUT + T1 YANG + T1 YANG MUT + T2 YANG + T3 YANG', 'T0 YANG MUT + T1 YIN + T2 YANG MUT + T3 YANG', 'T0 YANG + T1 YIN + T1 YANG + T2 YANG MUT + T3 YANG', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG + T3 YIN + T3 YIN MUT + T3 YANG', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN + T1 YANG + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG + T3 YIN + T3 YIN MUT + T3 YANG', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN MUT + T2 YIN + T2 YIN MUT + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN MUT + T1 YANG + T2 YIN + T2 YIN MUT + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG', 'T0 YANG MUT + T1 YIN + T2 YANG + T3 YANG MUT', 'T0 YANG + T1 YIN + T1 YANG + T2 YANG + T3 YANG MUT', 'T0 YANG + T1 YIN MUT + T1 YANG MUT + T2 YANG MUT + T3 YANG MUT', 'T0 YANG MUT + T1 YIN MUT + T1 YANG + T1 YANG MUT + T2 YANG MUT + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN MUT + T2 YIN + T2 YIN MUT + T2 YANG + T3 YIN + T3 YIN MUT + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN MUT + T1 YANG + T2 YIN + T2 YIN MUT + T2 YANG + T3 YIN + T3 YIN MUT + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN + T1 YANG + T1 YANG MUT + T2 YIN + T2 YIN MUT + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG MUT', 'T0 YANG + T1 YIN MUT + T1 YANG MUT + T3 YANG + T3 YANG MUT', 'T0 YANG MUT + T1 YIN MUT + T1 YANG + T1 YANG MUT + T3 YANG + T3 YANG MUT', 'T0 YANG MUT + T1 YIN + T2 YANG + T2 YANG MUT + T3 YANG + T3 YANG MUT', 'T0 YANG + T1 YIN + T1 YANG + T2 YANG + T2 YANG MUT + T3 YANG + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN + T1 YANG MUT + T2 YIN + T2 YIN MUT + T3 YIN + T3 YIN MUT + T3 YANG + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN + T1 YANG + T1 YANG MUT + T2 YIN + T2 YIN MUT + T3 YIN + T3 YIN MUT + T3 YANG + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG MUT + T1 YIN MUT + T2 YIN + T2 YIN MUT + T2 YANG + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG + T3 YANG MUT', 'T0 YIN + T0 YIN MUT + T0 YANG + T1 YIN MUT + T1 YANG + T2 YIN + T2 YIN MUT + T2 YANG + T2 YANG MUT + T3 YIN + T3 YIN MUT + T3 YANG + T3 YANG MUT']; relations courtes ['T0 YANG + T0 YANG MUT + T1 YANG', 'T2 YANG MUT + T3 YANG', 'T2 YANG + T3 YANG MUT']; figures distinctes (réunion de clés) 4096, dont vide : True"
       ]
      }
     ]
    },
    {
     "condition": "une région de référence est imposée claire (avec ancrage)",
     "valeur": {
      "longueur": 144,
      "dimension": 11,
      "distance_minimale": 36
     },
     "preuves": [
      {
       "journal": {
        "depot": "10.5281/zenodo.22965031",
        "enregistrement": "23101285",
        "fichier": "verif_paper1.log",
        "md5": "9ceccf258dffdf6d7518d9fba2a00c49",
        "copie": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.log"
       },
       "lignes": [
        "       rang des familles 11 ; [144, 11] dmin 36 ; mots de poids min 1",
        "       avec ancrage (region de reference claire) : rang 11"
       ]
      }
     ]
    }
   ],
   "note": "Ne s'écrit pas comme un triplet unique. « C₁ = [144, 12, 36] » est la branche sans ancrage ; le journal de verif_paper1.py imprime la branche avec ancrage dans son triplet, et les deux rangs ensuite.",
   "referents": [],
   "donnees": [
    "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/catalogue-axes.json"
   ],
   "script": {
    "chemin": "docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.py",
    "adresse": "https://anibal-amiot.com/docs/sources/2026-10-01/axes-niveaux-archive-v1.1/scripts/verif_paper1.py",
    "depose": {
     "enregistrement": "23101285",
     "fichier": "verif_paper1.py",
     "md5": "d0ec9edab883ab262bc0e006c7400391"
    },
    "aussi": {
     "chemin": "docs/sources/2026-10-01/one-object-v8/codes_cles.py",
     "adresse": "https://anibal-amiot.com/docs/sources/2026-10-01/one-object-v8/codes_cles.py",
     "depose": {
      "enregistrement": "23101928",
      "fichier": "codes_cles.py",
      "md5": "38bffb1e5667620ed5b3f3e2657859c1"
     }
    }
   },
   "statut": "verifie_journal_depose"
  },
  {
   "id": "invariant-48-48-48",
   "intitule": "48 / 48 / 48 par identité sur les 360 calques",
   "enonce": {
    "texte": "Pour chaque identité (famille,teinte), la somme des cases violettes/magenta/orange sur ses 6 niveaux vaut exactement 48/48/48. 56/60 identités : 8 cases violettes par niveau uniformément. 4 identités 'YIN-MUT-*' : transposition à 2 couleurs (0 ou 16 cases violettes par niveau, jamais 8) — magenta fixe côté YIN, orange fixe côté YANG (axe2).",
    "langue": "fr",
    "source": "data/referent_360_v3.json, clé invariant_48_48_48"
   },
   "valeur": {
    "violet": 48,
    "magenta": 48,
    "orange": 48,
    "par": "identité (famille, teinte), sur ses 6 niveaux"
   },
   "conditionnel": false,
   "referents": [
    "calques-360"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_comptes_couleurs.mjs",
    "adresse": "https://anibal-amiot.com/tools/verify_comptes_couleurs.mjs",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "identités à 48/48/48 (violet/magenta/orange sur 6 niveaux) : 60/60",
      "8 violettes à chaque niveau : 56 ; YIN-MUT-* à 0 ou 16 par niveau : 4"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Relu dans data/referent_360_v3.json, identité par identité ; le script échoue si une somme ou la répartition 56 + 4 annoncée diffère."
  },
  {
   "id": "croisements-1770-113280",
   "intitule": "1770 paires de couches, 113 280 constructions",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "paires": 1770,
    "constructions": 113280
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "donnees": [],
   "script": {
    "chemin": null,
    "adresse": null,
    "depose": {
     "enregistrement": "23214317",
     "fichier": "tools/croisements.py (dans l'archive de la V.3.2)",
     "md5": null
    },
    "note": "absent de ce dépôt et du site : à ajouter depuis l'archive de la V.3.2 (décision d'Anibal)"
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "paires non ordonnées : 1770 ; constructions : 113280"
     ]
    }
   ],
   "statut": "releve_journal_depose",
   "releve": {
    "par": "Anibal : archive de la V.3.2 téléchargée depuis Zenodo, 25 empreintes vérifiées, huit scripts relancés, chaque journal reproduit ligne pour ligne sauf la durée",
    "le": "2026-10-07",
    "a_faire": "verser ici l'instantané de la fiche 23214317 et les journaux de l'archive ; le statut passera à verifie_journal_depose quand leurs empreintes seront relues"
   },
   "note": "Lignes telles que relevées par Anibal ; l'indentation de croisements.log n'est pas connue ici."
  },
  {
   "id": "croisements-16768-9824",
   "intitule": "16 768 constructions conformes, 9 824 grilles distinctes",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "conformes": 16768,
    "grilles": 9824
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "donnees": [],
   "script": {
    "chemin": null,
    "adresse": null,
    "depose": {
     "enregistrement": "23214317",
     "fichier": "tools/croisements.py (dans l'archive de la V.3.2)",
     "md5": null
    },
    "note": "absent de ce dépôt et du site : à ajouter depuis l'archive de la V.3.2 (décision d'Anibal)"
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "constructions qui pavent simplement : 16768 ; grilles distinctes : 9824"
     ]
    }
   ],
   "statut": "releve_journal_depose",
   "releve": {
    "par": "Anibal : archive de la V.3.2 téléchargée depuis Zenodo, 25 empreintes vérifiées, huit scripts relancés, chaque journal reproduit ligne pour ligne sauf la durée",
    "le": "2026-10-07",
    "a_faire": "verser ici l'instantané de la fiche 23214317 et les journaux de l'archive ; le statut passera à verifie_journal_depose quand leurs empreintes seront relues"
   },
   "note": "Lignes telles que relevées par Anibal ; l'indentation de croisements.log n'est pas connue ici."
  },
  {
   "id": "croisements-1292-orbites",
   "intitule": "1292 orbites de Γ, dont 128 du corpus",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "orbites": 1292,
    "orbites_corpus": 128
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "donnees": [],
   "script": {
    "chemin": null,
    "adresse": null,
    "depose": {
     "enregistrement": "23214317",
     "fichier": "tools/croisements.py (dans l'archive de la V.3.2)",
     "md5": null
    },
    "note": "absent de ce dépôt et du site : à ajouter depuis l'archive de la V.3.2 (décision d'Anibal)"
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "orbites de Γ : 1292 ; dont corpus : 128"
     ]
    },
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/cube_croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "    orbites de Γ : 1292 ; mixtes : 0 ; hors corpus : 1164 ; admissibles hors corpus : 226 (19.4 %)"
     ]
    }
   ],
   "statut": "releve_journal_depose",
   "releve": {
    "par": "Anibal : archive de la V.3.2 téléchargée depuis Zenodo, 25 empreintes vérifiées, huit scripts relancés, chaque journal reproduit ligne pour ligne sauf la durée",
    "le": "2026-10-07",
    "a_faire": "verser ici l'instantané de la fiche 23214317 et les journaux de l'archive ; le statut passera à verifie_journal_depose quand leurs empreintes seront relues"
   },
   "note": "Lignes telles que relevées par Anibal ; l'indentation de croisements.log n'est pas connue ici."
  },
  {
   "id": "croisements-2064-admissibles",
   "intitule": "2064 grilles admissibles sur 9 824, soit 21,0 %",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "admissibles": 2064,
    "sur": 9824,
    "pourcentage": 21.0
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "donnees": [],
   "script": {
    "chemin": null,
    "adresse": null,
    "depose": {
     "enregistrement": "23214317",
     "fichier": "tools/croisements.py (dans l'archive de la V.3.2)",
     "md5": null
    },
    "note": "absent de ce dépôt et du site : à ajouter depuis l'archive de la V.3.2 (décision d'Anibal)"
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "habillables : 2064/9824 (21.0 %) ; hors corpus : 1808/9312 (19.4 %) ; corpus : 256/512"
     ]
    },
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "23214317",
      "fichier": "logs/cube_croisements.log",
      "md5": null,
      "copie": null
     },
     "lignes": [
      "    admissibles : 2064/9824 (21.0 %)"
     ]
    }
   ],
   "statut": "releve_journal_depose",
   "releve": {
    "par": "Anibal : archive de la V.3.2 téléchargée depuis Zenodo, 25 empreintes vérifiées, huit scripts relancés, chaque journal reproduit ligne pour ligne sauf la durée",
    "le": "2026-10-07",
    "a_faire": "verser ici l'instantané de la fiche 23214317 et les journaux de l'archive ; le statut passera à verifie_journal_depose quand leurs empreintes seront relues"
   },
   "note": "Lignes telles que relevées par Anibal ; l'indentation de croisements.log n'est pas connue ici."
  },
  {
   "id": "cube-edges-512-lemme-2",
   "intitule": "512 / 512 grilles en double (Lemme 2)",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "grilles_en_double": 512,
    "sur": 512
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024",
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    grilles en double : 512/512 (chaque grille exactement deux fois) ; correspondance n ↔ n⊕7 ou n⊕56 : ✓"
     ]
    }
   ],
   "statut": "verifie_journal_depose"
  },
  {
   "id": "cube-edges-128-orbites",
   "intitule": "128 orbites de Γ : 64 retenues, 64 exclues, aucune mixte",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "orbites": 128,
    "retenues": 64,
    "exclues": 64,
    "mixtes": 0
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024",
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    corpus   : 128 orbites ; grilles du corpus par orbite : {4: 128}",
      "    retenues : 64 ; exclues : 64 ; orbites mixtes : 0  ✓ (l'habillabilité est constante sur les orbites)"
     ]
    }
   ],
   "statut": "verifie_journal_depose"
  },
  {
   "id": "cube-edges-16-formes-0-habillage",
   "intitule": "16 / 16 formes d'ordre 6 du corpus, 0 habillage du cube (Section 7)",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "formes": 16,
    "presentes": 16,
    "habillages": 0
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024",
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    formes retenues : 16 ; présentes dans le corpus : 16/16",
      "    admettant un habillage du cube : 0"
     ]
    }
   ],
   "statut": "verifie_journal_depose"
  },
  {
   "id": "cube-edges-8-classes",
   "intitule": "8 classes à permutation de teinte près",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "classes": 8
   },
   "conditionnel": false,
   "referents": [
    "calques-360",
    "constructions-1024",
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    classes à permutation de teinte près : 8"
     ]
    }
   ],
   "statut": "verifie_journal_depose"
  },
  {
   "id": "harmonie-12-12-6-6",
   "intitule": "12 / 12 / 6 / 6 sur les 36 cases d'un carré d'ordre 6",
   "enonce": {
    "texte": "Le système d'encodage a été étudié et vérifié pour l'harmonie 12/12/6/6 (quatre matrices de remplissage réparties en deux paires de 12 et deux paires de 6 éléments).",
    "langue": "fr",
    "source": "unified-patterns.html (FAQ du site)"
   },
   "valeur": {
    "repartition": [
     12,
     12,
     6,
     6
    ],
    "cases": 36
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_comptes_couleurs.mjs",
    "adresse": "https://anibal-amiot.com/tools/verify_comptes_couleurs.mjs",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "carrés d'ordre 6 : rouge 6, bleu 6, vert 12, jaune 12 — 256/256"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Relu dans data/referent_256_v3.json : chacun des 256 carrés répartit ses 36 cases en 6 rouges, 6 bleues, 12 vertes, 12 jaunes ; le script échoue sinon."
  },
  {
   "id": "figures-note-octet-pour-octet",
   "intitule": "Les cinq figures de la note, reproduites octet pour octet",
   "enonce": {
    "texte": null,
    "sans_source": "SANS SOURCE : le texte de la note soumise au Journal of Mathematics and the Arts n'est pas dans ce dépôt ; l'énoncé est à recopier depuis la note, par Anibal ou sur sa relecture. L'intitulé n'est qu'une étiquette."
   },
   "valeur": {
    "figures": 5,
    "identite": "octet pour octet"
   },
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "script": {
    "chemin": "tools/make_figures.py",
    "adresse": "https://anibal-amiot.com/tools/make_figures.py",
    "depose": null
   },
   "preuves": [],
   "statut": "affirme",
   "note": "Aucun journal ne l'imprime ; contrôlable par les empreintes des figures déposées dans la V.3.2, qui ne sont pas dans l'instantané."
  },
  {
   "id": "six-formes-224-grilles",
   "intitule": "Six formes indépendantes, pas huit : les 256 motifs dessinent 224 grilles — 192 vues une fois, 64 motifs se partageant 32 grilles",
   "enonce": {
    "texte": "Les 256 motifs qui ont une page sont 8 formes × 32 hexagrammes (h0 à h31). Ils ne dessinent pas 256 grilles, mais **224** :",
    "langue": "fr",
    "source": "docs/six-formes-independantes.md, « Le résultat »",
    "copie": "docs/six-formes-independantes.md"
   },
   "valeur": {
    "motifs": 256,
    "grilles": 224,
    "grilles_vues_une_fois": 192,
    "motifs_jumeles": 64,
    "grilles_partagees": 32,
    "relation": "par2-yin-yang-hN = par3-sans-yang-mut-h(N XOR 7)"
   },
   "conditionnel": false,
   "referents": [
    "constructions-1024"
   ],
   "donnees": [
    "data/motifs-index.csv"
   ],
   "script": {
    "chemin": "tools/verify_six_formes.mjs",
    "adresse": "https://anibal-amiot.com/tools/verify_six_formes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-series-pinterest.yml",
     "lignes": [
      "1. 224 grilles distinctes ; répartition {\"1\":192,\"2\":32}",
      "2. 32 paires de la forme par2-yin-yang-hN = par3-sans-yang-mut-h(N XOR 7)"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Les 256 motifs (8 formes × h0…h31) ne sont pas les 256 carrés d'ordre 6 (data/referent_256_v3.json). Aucun journal déposé sur Zenodo : le script, qui échoue si un seul des cinq points ne tient pas, est lancé par la CI à chaque passage."
  },
  {
   "id": "planches-111",
   "intitule": "111 planches du traité",
   "enonce": {
    "texte": "planches du traité",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 111 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "planches": 111
   },
   "script": {
    "chemin": "tools/check_livres.py",
    "adresse": "https://anibal-amiot.com/tools/check_livres.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-pdf.yml",
     "lignes": [
      "OK    fr : 111 pages 1920 × 1080, licence, remerciements, aucune écriture étrangère, en-tête sur les 111, lecteur = PDF aux pages 1, 2, 93, 111"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Les huit éditions PDF comptent 111 pages ; check_livres.py échoue sinon.",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "croix-ansees-2",
   "intitule": "2 croix ansées d'ordre 6",
   "enonce": {
    "texte": "croix ansées d'ordre 6",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 2 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "croix": 2,
    "appariements_coherents": 8,
    "choix_bruts": 64,
    "a_symetrie_centrale": 8,
    "criteres_lignes_seules": 8
   },
   "script": {
    "chemin": "tools/croix_ansee.py",
    "adresse": "https://anibal-amiot.com/tools/croix_ansee.py",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-08/croix_ansee.log",
      "sha256": "2367e32494c163c769aa73c2c3f0870ea9656b6fc3b3d3b22e98c47ddb05934d",
      "script": "tools/croix_ansee.py",
      "script_sha256": "19e483a4eaeea0c3e93d5e95334b7f4402e20d93e37d61e6332bcd68c642aafd",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-08"
     },
     "lignes": [
      "choix bruts (2 paires par ligne, 6 lignes) : 64",
      "appariements cohérents                    : 8",
      "  dont à symétrie centrale                : 8",
      "critères II–III sur les lignes seules     : 8",
      "critères II–III sur lignes et colonnes    : 2"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html",
   "note": "La croix ansée est un appariement des 24 cases hors diagonales par des traits, sous les trois critères de la planche 040 ; la symétrie centrale en sort comme conséquence (8/8), pas comme hypothèse. Ce n'est pas la rosace (12 cases, INHALE k ∪ EXHALE k) de tools/verify_echelle.py : voir l'entrée echelle-classes-transversales-rosaces. Depuis le 2026-10-08, le script sort en erreur si l'un de ses quatre comptes change (correction d'Anibal) et la CI le relance ; le journal du 2026-10-07, sortie de la version précédente, reste en place."
  },
  {
   "id": "carres-solaires-256",
   "intitule": "256 carrés solaires d'ordre 6, 128 par croix",
   "enonce": {
    "texte": "carrés solaires d'ordre 6, 128 par croix, ensemble complet",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 256 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "carres": 256,
    "par_croix": 128,
    "colorations_I_IV": 1492352,
    "jeux_RB": 48384
   },
   "referents": [
    "carres-ordre-6"
   ],
   "script": {
    "chemin": "tools/enum_criteres.py",
    "adresse": "https://anibal-amiot.com/tools/enum_criteres.py",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/enum_criteres.log",
      "sha256": "7ebb8b54d445b9f307f429e4bd523c4fb183cc895e15877ccae5da565fbd3bfa",
      "script": "tools/enum_criteres.py",
      "script_sha256": "4f156f38fa7470ca4413d0b3ca6133329f43f4b4d6e498b5b1ef31e5261df657",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "jeux R/B : 48384",
      "avec la condition (b) (diagonales de même couleur par ligne ; paires miroir = un trait + une paire unie) : 128 ; magiques : 128",
      "  1492352 est l'ensemble COMPLET des coloriages sous les critères I–IV SEULS,"
     ]
    },
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-08/verif_protocole.log",
      "sha256": "47b32cf6bbe307c8aa7c3e75599a0059ff2bdb8dbd5a24e76b799df77fda8df4",
      "script": "tools/verif_protocole.py",
      "script_sha256": "afae0fa6d091ba2294d2916b5ae9b562bf3f8c7cda018340a7766af7c3a7ffe1",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-08"
     },
     "lignes": [
      "§5       carrés magiques complets (lignes, colonnes, deux diagonales) : 256/256",
      "§2       diagonales : deux cases centralement symétriques, même teinte (gris ou jaune), donc somme 37 : 256/256"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "note": "La deuxième ligne de enum_criteres.log porte une durée (« temps 142s ») : elle n'est pas citée.",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "carres-ordre-12-64",
   "intitule": "64 carrés magiques d'ordre 12 par assemblage, constante 870",
   "enonce": {
    "texte": "carrés magiques d'ordre 12 par assemblage, constante 870",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 64 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "assemblages": 64,
    "constante": 870
   },
   "referents": [
    "carres-ordre-6"
   ],
   "script": {
    "chemin": "tools/verif_protocole.py",
    "adresse": "https://anibal-amiot.com/tools/verif_protocole.py",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-08/verif_protocole.log",
      "sha256": "47b32cf6bbe307c8aa7c3e75599a0059ff2bdb8dbd5a24e76b799df77fda8df4",
      "script": "tools/verif_protocole.py",
      "script_sha256": "afae0fa6d091ba2294d2916b5ae9b562bf3f8c7cda018340a7766af7c3a7ffe1",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-08"
     },
     "lignes": [
      "§5/§7    ordre 12, les 64 assemblages 2×2 sous le même protocole (constante 870) : 64/64"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "calques-360",
   "intitule": "360 calques : 15 familles d'axes × 4 natures × 6 niveaux",
   "enonce": {
    "texte": "calques : 15 familles d'axes × 4 natures × 6 niveaux",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 360 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "calques": 360,
    "familles": 15,
    "natures": 4,
    "niveaux": 6
   },
   "referents": [
    "calques-360"
   ],
   "script": {
    "chemin": "tools/index_referents.mjs",
    "adresse": "https://anibal-amiot.com/tools/index_referents.mjs",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "Recomptés : carres-ordre-6 (256, a4e2c53d), calques-360 (360, d00a5075), constructions-1024 (1024, ef900ad6)."
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "index_referents.mjs relit le nombre de calques dans le fichier et échoue s'il n'en compte pas 360 ; la ligne citée est celle de --verifie, le mode que lance la CI (jusqu'au 8 oct. 2026 elle citait la ligne de l'écriture, que la CI n'imprime pas : écart relevé par check_sorties_ci.mjs).",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "demi-decalage-8-sur-15",
   "intitule": "8 familles sur 15 admises par le critère de demi-décalage",
   "enonce": {
    "texte": "familles admises par le critère de demi-décalage",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 8 sur 15 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "familles_admises": 8,
    "familles": 15,
    "couples_unifies": 16
   },
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "familles : 15 ; images : 60",
      "couples unifiés (6 couples testés par famille) : 16 dans 8 familles"
     ]
    }
   ],
   "statut": "verifie_journal_depose",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "corpus-512-256-128",
   "intitule": "512 grilles unifiées, 256 pavages du plan, 128 orbites de symétrie",
   "enonce": {
    "texte": "grilles unifiées, pavages du plan, orbites de symétrie",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 512 / 256 / 128 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "grilles": 512,
    "pavages": 256,
    "orbites": 128
   },
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    grilles distinctes : 512",
      "    pavages distincts  : 256",
      "    corpus   : 128 orbites ; grilles du corpus par orbite : {4: 128}"
     ]
    }
   ],
   "statut": "verifie_journal_depose",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "cube-256-128-64",
   "intitule": "256 grilles, 128 pavages, 64 orbites se referment sur le cube",
   "enonce": {
    "texte": "parmi elles, celles qui se referment sur le cube",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 256 / 128 / 64 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "grilles": 256,
    "pavages": 128,
    "orbites": 64
   },
   "referents": [
    "calques-360",
    "constructions-1024"
   ],
   "script": {
    "chemin": "tools/cube_edges.py",
    "adresse": "https://anibal-amiot.com/tools/cube_edges.py",
    "depose": {
     "enregistrement": "22967302",
     "fichier": "cube_edges.py",
     "md5": "b908d185f93768636a9b85ad601c061c"
    }
   },
   "preuves": [
    {
     "journal": {
      "depot": "10.5281/zenodo.22862110",
      "enregistrement": "22967302",
      "fichier": "cube_edges.log",
      "md5": "a2f0f13e78e59d04a8b0a13614bd3563",
      "copie": "docs/sources/2026-10-07/demi-decalage-v2/cube_edges.log"
     },
     "lignes": [
      "    grilles distinctes   : 256",
      "    pavages distincts    : 128",
      "    retenues : 64 ; exclues : 64 ; orbites mixtes : 0  ✓ (l'habillabilité est constante sur les orbites)"
     ]
    }
   ],
   "statut": "verifie_journal_depose",
   "conditionnel": false,
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "carter-256-bits",
   "intitule": "256 bits : taille de clé de Carter",
   "enonce": {
    "texte": "taille de clé de Carter ; la géométrie n'ajoute rien",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 256 bits »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "bits": 256
   },
   "script": null,
   "preuves": [],
   "statut": "affirme",
   "note": "Pas un calcul : la taille de clé des deux chiffrements standard (AES-256-GCM, XChaCha20-Poly1305) que Carter emploie en cascade.",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "bicolore-8191-4095",
   "intitule": "8191 / 4095 figures bicolores distinctes, grain triangle / grain case",
   "enonce": {
    "texte": "figures bicolores distinctes par XOR de 16 instances d'axes, grain triangle / grain case",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 8191 / 4095 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "grain_triangle": 8191,
    "grain_case": 4095
   },
   "script": {
    "chemin": "tools/bicolore_galerie_comptes.mjs",
    "adresse": "https://anibal-amiot.com/tools/bicolore_galerie_comptes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/bicolore_galerie_comptes.log",
      "sha256": "0e59bc8a67227d3663eddb57222a3547214dd9d6d95abda831d125c6e07a03a6",
      "script": "tools/bicolore_galerie_comptes.mjs",
      "script_sha256": "45dd6b4f2fd9e9bae19476f600b1497168a30d653c59c0596290085faa435748",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "  figures distinctes non nulles (65 535 accords) : 8191  (+ 7 accord(s) donnant la figure nulle, écartée — pas un motif)",
      "  figures distinctes non nulles (65 535 accords) : 4095  (+ 15 accord(s) donnant la figure nulle, écartée — pas un motif)"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "bicolore-rang-13-12",
   "intitule": "rang GF(2) 13 / 12 des 16 instances, grain triangle / grain case",
   "enonce": {
    "texte": "rang GF(2) des 16 instances, grain triangle / grain case — sur C1, 12 si les figures gardent la polarité que la règle leur donne (11 si une région de référence est imposée claire, [A] §5.4) ; sur C8 rien ne dépend de la convention",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 13 / 12 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "grain_triangle": 13,
    "grain_case": 12
   },
   "script": {
    "chemin": "tools/bicolore_galerie_comptes.mjs",
    "adresse": "https://anibal-amiot.com/tools/bicolore_galerie_comptes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/bicolore_galerie_comptes.log",
      "sha256": "0e59bc8a67227d3663eddb57222a3547214dd9d6d95abda831d125c6e07a03a6",
      "script": "tools/bicolore_galerie_comptes.mjs",
      "script_sha256": "45dd6b4f2fd9e9bae19476f600b1497168a30d653c59c0596290085faa435748",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "  rang GF(2) des 16 instances : 13  (garde-fou : figures non nulles = 2^13 - 1 = 8191)",
      "  rang GF(2) des 16 instances : 12  (garde-fou : figures non nulles = 2^12 - 1 = 4095)"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "note": "Mêmes dimensions que code-c8 et la branche sans ancrage de code-c1.",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "bicolore-144-fermees",
   "intitule": "144 figures bicolores fermées sur le cube au grain case",
   "enonce": {
    "texte": "figures bicolores qui ferment sur le cube au grain case (π = identité)",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 144 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "fermees": 144,
    "distinctes": 4096
   },
   "script": {
    "chemin": "tools/bicolore_galerie_comptes.mjs",
    "adresse": "https://anibal-amiot.com/tools/bicolore_galerie_comptes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/bicolore_galerie_comptes.log",
      "sha256": "0e59bc8a67227d3663eddb57222a3547214dd9d6d95abda831d125c6e07a03a6",
      "script": "tools/bicolore_galerie_comptes.mjs",
      "script_sha256": "45dd6b4f2fd9e9bae19476f600b1497168a30d653c59c0596290085faa435748",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "  fermeture sur le cube (π = identité, continuité) : 144 figures fermées / 4096 distinctes (uni clair + uni sombre inclus)"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "note": "La page nomme assets/bicolore-cube-c1.mjs, la fonction de fermeture ; le compte est imprimé par tools/bicolore_galerie_comptes.mjs, qui l'emploie.",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "bicolore-142-galerie",
   "intitule": "142 motifs de la galerie bicolore",
   "enonce": {
    "texte": "motifs de la galerie bicolore : les 144 fermées, moins l'uni clair et l'uni sombre",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 142 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "motifs": 142
   },
   "donnees": [
    "data/bicolore_galerie_v1.json"
   ],
   "script": {
    "chemin": "tools/bicolore_galerie_comptes.mjs",
    "adresse": "https://anibal-amiot.com/tools/bicolore_galerie_comptes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/bicolore_galerie_comptes.log",
      "sha256": "0e59bc8a67227d3663eddb57222a3547214dd9d6d95abda831d125c6e07a03a6",
      "script": "tools/bicolore_galerie_comptes.mjs",
      "script_sha256": "45dd6b4f2fd9e9bae19476f600b1497168a30d653c59c0596290085faa435748",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "  taille minimale d'accord, sur les 142 PUBLIÉS (galerie-bicolore.html) : 1:7 2:19 3:29 4:16 5:7 6:19 7:29 8:16"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "conditionnel": false,
   "referents": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "bicolore-7-familles",
   "intitule": "7 instances YIN / YIN mutant qui ferment seules sur le cube",
   "enonce": {
    "texte": "familles bicolores (YIN/YIN mutant) qui ferment seules sur le cube, accord minimal = 1 instance — à ne pas confondre avec un autre « 7 » du dépôt portant sur des familles YANG/YANG mutant et une tout autre propriété (droites tracées vs. systèmes de bandes)",
    "langue": "fr",
    "source": "chiffres-et-sources.html, tableau, ligne « 7 »",
    "copie": "chiffres-et-sources.html"
   },
   "valeur": {
    "instances": 7
   },
   "script": {
    "chemin": "tools/bicolore_galerie_comptes.mjs",
    "adresse": "https://anibal-amiot.com/tools/bicolore_galerie_comptes.mjs",
    "depose": null
   },
   "preuves": [
    {
     "journal_local": {
      "fichier": "docs/journaux/2026-10-07/bicolore_galerie_comptes.log",
      "sha256": "0e59bc8a67227d3663eddb57222a3547214dd9d6d95abda831d125c6e07a03a6",
      "script": "tools/bicolore_galerie_comptes.mjs",
      "script_sha256": "45dd6b4f2fd9e9bae19476f600b1497168a30d653c59c0596290085faa435748",
      "machine": "conteneur de session Claude Code : Intel Xeon @ 2,80 GHz, 4 processeurs",
      "le": "2026-10-07"
     },
     "lignes": [
      "  instances seules qui se referment sur le cube (7, accord minimal = 1 instance) : YIN T0, YIN T1, YIN T2, YIN-MUT T0, YIN-MUT T1, YIN-MUT T2, YIN-MUT T3"
     ]
    }
   ],
   "statut": "verifie_journal_local",
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "page": "chiffres-et-sources.html"
  },
  {
   "id": "quadricolore-64-motifs",
   "intitule": "Les 64 motifs de Magic quadricolore sont l'échiquier de la page 047, rouge et bleu fondus en une teinte",
   "enonce": {
    "texte": "les 64 motifs de la galerie Magic quadricolore sont l'échiquier de la page 047, en trois teintes au lieu de quatre.",
    "langue": "fr",
    "source": "en-tête de tools/verify_quadricolore.py (Anibal), qui énonce les cinq points vérifiés"
   },
   "valeur": {
    "motifs": 64,
    "grille": 12,
    "par_teinte": 48,
    "assemblages_distincts": 64,
    "fusion": "rouge + bleu → une teinte ; gris et jaune gardent la leur"
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [
    "assets/unified-motifs/1.svg"
   ],
   "script": {
    "chemin": "tools/verify_quadricolore.py",
    "adresse": "https://anibal-amiot.com/tools/verify_quadricolore.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "2. motifs lus en 12 × 12, 48 par teinte : 64/64",
      "3. motifs retrouvés dans le référent, case par case : 64/64",
      "4. affectations de teintes distinctes : 1",
      "5. assemblages distincts : 64/64"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le script échoue si l'un des cinq points cesse d'être vrai."
  },
  {
   "id": "cadres-ordre-12-512",
   "intitule": "Du centrage pair pair (page 031) : 512 carrés magiques d'ordre 12 en deux familles de 256, disjointes des 64 assemblages voisins",
   "enonce": {
    "texte": "quatre copies d'un même carré d'ordre 6, conformes ou miroirs, dans un cadre d'ordre 12, donnent un carré magique d'ordre 12.",
    "langue": "fr",
    "source": "en-tête de tools/verify_cadres_ordre12.py (Anibal), d'après « Du centrage pair pair », livre, page 031"
   },
   "valeur": {
    "par_agencement": 256,
    "constante": 870,
    "familles": 2,
    "total": 512,
    "en_commun": 0,
    "assemblages_voisins": 64,
    "voisins_dans_les_familles": 0
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_cadres_ordre12.py",
    "adresse": "https://anibal-amiot.com/tools/verify_cadres_ordre12.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. miroir à droite  : 256/256 magiques, constante [870], 256 grilles distinctes",
      "1. miroir en bas    : 256/256 magiques, constante [870], 256 grilles distinctes",
      "2. droite = gauche et bas = haut : True et True",
      "3. les deux familles sont disjointes : 0 grille(s) en commun, 512 au total",
      "4. corpus clos par inversion des couleurs : True",
      "5. assemblages de quatre carrés voisins : 64 distincts, 0 dans les deux familles"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le script échoue si l'un des cinq points cesse d'être vrai. Il importe protocole et grille6 de tools/verif_protocole.py."
  },
  {
   "id": "quadricolore-16-unified-patterns",
   "intitule": "16 des 64 motifs de Magic quadricolore sont des unified patterns : les colonnes 0 et 7 de l'échiquier, huit chacune",
   "enonce": {
    "texte": "16 des 64 sont des « unified patterns » : le motif garde sa forme quand on le décale d'une demi-période en ligne ET en colonne (6 cases dans chaque sens) à une transposition de teinte près.",
    "langue": "fr",
    "source": "en-tête de tools/verify_quadricolore.py (Anibal), point 6"
   },
   "valeur": {
    "unified_patterns": 16,
    "sur": 64,
    "rb_gris": 8,
    "rb_jaune": 8,
    "les_deux": 0,
    "colonnes": {
     "0": 8,
     "7": 8
    }
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [
    "assets/unified-motifs/1.svg"
   ],
   "script": {
    "chemin": "tools/verify_quadricolore.py",
    "adresse": "https://anibal-amiot.com/tools/verify_quadricolore.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "6. unified patterns (demi-décalage diagonal, une teinte transposée) : 16/64",
      "   RB ↔ gris : 8, RB ↔ jaune : 8, les deux : 0",
      "   colonnes de l’échiquier : {0: 8, 7: 8}"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le script échoue si le compte n'est pas 16, si une même grille admet les deux transpositions, ou si les colonnes ne sont pas 0 et 7."
  },
  {
   "id": "cle-damier-ligne-nombre-colonne-forme",
   "intitule": "Sur le damier 16 × 16 la ligne porte un nombre ; sur le damier 8 × 8 la colonne porte une forme, qui est le trigramme inférieur écrit en position",
   "enonce": {
    "texte": "La ligne du damier porte un nombre, la colonne porte une forme, et cette forme est le trigramme.",
    "langue": "fr",
    "source": "tools/verify_cle_damier.py (Anibal), en-tête points A à E et phrase finale"
   },
   "valeur": {
    "lignes_constantes": 16,
    "colonnes_constantes_16x16": 0,
    "valeurs_de_ligne": [
     3,
     9,
     5,
     7,
     7,
     5,
     5,
     7,
     5,
     7,
     7,
     5,
     5,
     7,
     3,
     9
    ],
    "recouvrement_inhale_exhale_bleu": 0,
    "reunion_bleu": 48,
    "colonnes_constantes_8x8": 8,
    "formes_distinctes": 8,
    "lignes_constantes_8x8": 0,
    "trigramme_lu": "8/8"
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_cle_damier.py",
    "adresse": "https://anibal-amiot.com/tools/verify_cle_damier.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "A. rouge + bleu dans la moitié haute : constant sur 16/16 lignes, 0/16 colonnes",
      "    3  9  5  7  7  5  5  7  5  7  7  5  5  7  3  9",
      "D. inhale ∩ exhale sur le bleu : [0] case(s) ; réunion : [48] cases",
      "B. forme bleue de inhale + exhale : constante sur 8/8 colonnes (8 formes distinctes), 0/8 lignes",
      "C. la forme de la colonne C est le trigramme C écrit en position : 8/8"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le point E (chute du pied) est imprimé mais n'est pas cité ici : (c ^ 1) // 2 == c // 2 est vrai pour tout entier, il ne relit pas les données."
  },
  {
   "id": "cle-couleurs-64-16x4",
   "intitule": "Un hexagramme vaut un tétragramme et une couleur : 64 = 16 × 4, les seize groupes étant les super-blocs 2 × 2 du damier",
   "enonce": {
    "texte": "Un trigramme vaut donc ses deux traits du haut, plus un bit : palindrome ou non. Un hexagramme vaut deux trigrammes, donc quatre traits du haut plus deux bits : hexagramme = tétragramme × couleur, 64 = 16 × 4",
    "langue": "fr",
    "source": "en-tête de tools/verify_cle_couleurs.py (Anibal), points 1 à 3"
   },
   "valeur": {
    "elementaux_palindromes": "8/8 trigrammes",
    "couples_distincts": 64,
    "par_couleur": 16,
    "super_blocs_quatre_couleurs": 16
   },
   "conditionnel": false,
   "referents": [],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_cle_couleurs.py",
    "adresse": "https://anibal-amiot.com/tools/verify_cle_couleurs.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. élémental ⟺ palindrome, sur les 8 trigrammes : True",
      "2. hexagramme ↔ (tétragramme, couleur) : 64/64 couples distincts ; effectifs {'BLEU': 16, 'CIEL': 16, 'GRIS': 16, 'NUIT': 16}",
      "3. super-blocs 2 × 2 du damier portant les quatre couleurs : 16/16 ; le tétragramme du groupe est bien (ligne // 2, colonne // 2) : True"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le script échoue si l'un des points 1 à 3, ou le compte par blocs du point 4, cesse d'être vrai. Le témoin Roi Wen est imprimé, pas contrôlé : la même ligne imprime 0/16 pour les quatres consécutifs de l'ordre par poids."
  },
  {
   "id": "pont-formes-changements",
   "intitule": "La constante de ligne et les unified patterns se lisent sur les traits, par le nombre de changements c d'un trigramme",
   "enonce": {
    "texte": "Les deux constantes du damier se traduisent en traits, et elles se traduisent par le même invariant : le nombre de changements entre traits voisins d'un trigramme.",
    "langue": "fr",
    "source": "en-tête de tools/verify_pont_formes.py (Anibal), points 1 à 3"
   },
   "valeur": {
    "lignes_constantes": 16,
    "lignes_conformes_formule": 16,
    "formule": "v = 6 − (−1)^p × (3 − 2c)",
    "unified_patterns": 16,
    "colonnes": [
     "terre",
     "ciel"
    ],
    "transposition_conforme": 16,
    "rb_gris": 8,
    "rb_jaune": 8
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_pont_formes.py",
    "adresse": "https://anibal-amiot.com/tools/verify_pont_formes.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "0. c pair ⟺ trigramme élémental, sur les 8 trigrammes : True",
      "1. constante de ligne : 16/16 lignes constantes, 16/16 conformes à v = 6 − (−1)^p × (3 − 2c)",
      "2. unified patterns : 16/64, et ce sont exactement les assemblages dont le trigramme inférieur a c = 0 : True",
      "   colonnes concernées : terre, ciel",
      "3. transposition RB ↔ gris quand le trait du haut s’accorde avec le trigramme inférieur : 16/16",
      "   RB ↔ gris : 8, RB ↔ jaune : 8"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le script échoue si l'un des points 0 à 3 cesse d'être vrai (l'en-tête dit « ces trois points » ; le point 0 est contrôlé aussi)."
  },
  {
   "id": "protocole-quatre-classes-256",
   "intitule": "Les 256 carrés d'ordre 6 vérifient les deux conditions d'effectifs du protocole à quatre classes, et sont magiques diagonales comprises",
   "enonce": {
    "texte": "Quatre classes, deux conditions d’effectifs, et l’ordre n’a qu’à être pair.",
    "langue": "fr",
    "source": "tools/protocole_general.py (Anibal), phrase finale ; conditions dans l'en-tête, « DEUX CONDITIONS NÉCESSAIRES »"
   },
   "valeur": {
    "condition_ligne": "256/256",
    "condition_colonne": "256/256",
    "magiques": "256/256",
    "controle_negatif_magique": false
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/protocole_general.py",
    "adresse": "https://anibal-amiot.com/tools/protocole_general.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "  condition de ligne   (B + V = 3) : 256/256",
      "  condition de colonne (B + J = 3) : 256/256",
      "  carrés magiques, diagonales comprises   : 256/256",
      "  contrôle négatif (tout en B) : conditions False, False ; magique False"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le contrôle négatif (tout en B) viole les deux conditions et n'est pas magique ; le script échoue s'il l'était."
  },
  {
   "id": "pavage-miroirs-ordre-6m",
   "intitule": "Un carré d'ordre 6 pavé par miroirs alternés donne un carré magique d'ordre 6m",
   "enonce": {
    "texte": "Soit E un étiquetage d'ordre 6 du corpus, et m ≥ 1. On pave une grille d'ordre 6m avec m × m copies de E [...] Le résultat est un carré magique, diagonales comprises.",
    "langue": "fr",
    "source": "en-tête de tools/pavage_miroirs.py (Anibal), « ÉNONCÉ »"
   },
   "valeur": {
    "ordres_complets": {
     "6": "256/256",
     "12": "256/256",
     "18": "256/256",
     "24": "256/256",
     "30": "256/256"
    },
    "ordres_echantillon": {
     "42": "12/12",
     "48": "12/12",
     "60": "12/12"
    },
    "motifs_ordre_12": "16/256",
    "blocs_de_trois": {
     "regles_orientation_ordre_12": "2/256",
     "regles": [
      "CCCC",
      "DDDD"
     ],
     "ordres_complets": {
      "12": "256/256",
      "18": "256/256"
     },
     "ordres_echantillon": {
      "30": "20/20",
      "42": "20/20"
     },
     "sous_ensembles_ordre_30": 25
    }
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/pavage_miroirs.py",
    "adresse": "https://anibal-amiot.com/tools/pavage_miroirs.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "ordre   6 (1 × 1 blocs) : 256/256 magiques",
      "ordre  12 (2 × 2 blocs) : 256/256 magiques",
      "ordre  18 (3 × 3 blocs) : 256/256 magiques",
      "ordre  24 (4 × 4 blocs) : 256/256 magiques",
      "ordre  30 (5 × 5 blocs) : 256/256 magiques",
      "ordre  42 (7 × 7 blocs) : 12/12 sur échantillon",
      "ordre  48 (8 × 8 blocs) : 12/12 sur échantillon",
      "ordre  60 (10 × 10 blocs) : 12/12 sur échantillon",
      "motifs de miroirs donnant un carré magique à l’ordre 12 : 16/256",
      "  règles d’orientation par bloc valides à l’ordre 12 : 2/256  (CCCC, DDDD — tout conforme, tout demi-tour)",
      "  CCCC — ordre  12 : 256/256",
      "  CCCC — ordre  18 : 256/256",
      "  CCCC — ordre  30 : 20/20",
      "  CCCC — ordre  42 : 20/20",
      "  DDDD — ordre  12 : 256/256",
      "  DDDD — ordre  18 : 256/256",
      "  DDDD — ordre  30 : 20/20",
      "  DDDD — ordre  42 : 20/20",
      "  ordre 30, 10 × 10 blocs de trois : chaque sous-ensemble 25 fois"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "L'en-tête annonçait l'ordre 36 sur échantillon ; Anibal l'a corrigé (2026-10-08) : ordres 6 à 30 complets, 42, 48, 60 sur échantillon, les trois que le script teste. Section ajoutée : l'unité du pavage est le bloc de 3 × 3 de la page 034."
  },
  {
   "id": "invariants-inspir-expir",
   "intitule": "L'invariant diagonal est le même sur les 64 assemblages et sans case rouge ni bleue ; les traits bicolores de l'invariant en ligne portent huit formes, une par ligne du damier",
   "enonce": {
    "texte": "La ligne porte une forme elle aussi : les traits bicolores isolés dans son invariant.",
    "langue": "fr",
    "source": "tools/verify_invariants.py (Anibal), phrase finale ; en-tête points 1 à 4"
   },
   "valeur": {
    "invariant_diagonal_formes": 1,
    "cases": 48,
    "formes_de_ligne": 8,
    "cases_par_forme": 24,
    "orbites": 10
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_invariants.py",
    "adresse": "https://anibal-amiot.com/tools/verify_invariants.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. inv(6,0) ∩ inv(0,6) = inv(6,6) : True ; formes diagonales distinctes sur les 64 : 1 (48 cases)",
      "   couleurs de l’invariant diagonal : {'jaune': 1536, 'vert': 1536}",
      "2. inv(6,0) : constant par ligne True, par colonne False ; 2 forme(s), séparant les deux moitiés : True",
      "2. inv(0,6) : constant par ligne True, par colonne False ; 2 forme(s), séparant les deux moitiés : True",
      "   les deux invariants portent les mêmes formes : True ; échangées entre les moitiés : True",
      "3. traits bicolores de inv(6,0) : constants par ligne True, par colonne False ; 8 formes distinctes de [24] cases",
      "4. orbites : 10 au total, dont 2 noyaux de moitié et 8 paires",
      "   paires de la moitié haute : [(0, 1), (0, 3), (1, 2), (2, 3)]"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "« inv(0,6) donne les deux mêmes formes, échangées » est vérifié depuis le 2026-10-08 (ligne « les deux invariants portent les mêmes formes »), et le script échoue si ça cesse d'être vrai."
  },
  {
   "id": "transcription-64-lecture",
   "intitule": "Les deux trigrammes se lisent sur l'assemblage, et leur couple est l'hexagramme : 64/64",
   "enonce": {
    "texte": "Les deux trigrammes se lisent sur l’assemblage, et leur couple est l’hexagramme.",
    "langue": "fr",
    "source": "tools/transcription.py (Anibal), phrase finale"
   },
   "valeur": {
    "lectures": "64/64",
    "parite": "64/64",
    "unified_patterns": 16,
    "constante_de_ligne": "16/16"
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [
    "data/transcription-64.json"
   ],
   "script": {
    "chemin": "tools/transcription.py",
    "adresse": "https://anibal-amiot.com/tools/transcription.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. lectures redonnant la case du damier : 64/64",
      "   (le trigramme inférieur se lit sans convention ; celui du supérieur suit CYCLE = ['00', '01', '10', '11'], point de départ du cycle à quatre — un autre choix renumérote les huit formes de ligne et fait tomber ce 64/64)",
      "2. parité des jonctions = élémental / manifestation : 64/64",
      "3. unified patterns prédits par la lecture : 16, observés : 16, identiques : True",
      "4. constante de ligne conforme à la formule : 16/16"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "La table des formes du trigramme supérieur est construite sur la colonne 0 à partir du rang R (CYCLE, seule convention déclarée) ; le 64/64 du supérieur établit donc que la forme est constante par ligne et distincte, la valeur du trigramme venant de la convention. --json relit data/transcription-64.json au même octet. Le script le dit lui-même sous le 64/64 (ligne « CYCLE = »)."
  },
  {
   "id": "echelle-classes-transversales-rosaces",
   "intitule": "Six classes d'invariance, huit transversales de la page 052, quatre rosaces en huit figures, connexité inégale des jonctions, seul le décalage diagonal donne la constante",
   "enonce": {
    "texte": "Six classes, huit transversales, quatre rosaces : l’échelle se referme.",
    "langue": "fr",
    "source": "tools/verify_echelle.py (Anibal), phrase finale ; en-tête points 1 à 5"
   },
   "valeur": {
    "classes": 6,
    "cases_par_classe": 16,
    "cases_par_quadrant": 4,
    "transversales_page_052": "8/8",
    "demi_tour": "4/4",
    "transversales_du_corpus": "0/512",
    "rosaces": 4,
    "figures_sous_symetries": 8,
    "orbites": 4,
    "cases_support": 24,
    "couverture": 2,
    "connexite": {
     "aucune": [
      32,
      20
     ],
     "coeur-ventre": [
      48,
      12
     ],
     "tete-coeur": [
      64,
      4
     ],
     "les_deux": [
      48,
      12
     ]
    },
    "decalage_constant_par_colonne": "(6, 6) seul"
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [
    "data/elements-052.json"
   ],
   "script": {
    "chemin": "tools/verify_echelle.py",
    "adresse": "https://anibal-amiot.com/tools/verify_echelle.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. classes d’invariance : 6, de [16] cases ; complémentaires deux à deux : 6/6",
      "   un trait par paire : {'bas': 2, 'haut': 2, 'milieu': 2} ; cases par quadrant de 6 × 6 : [(4, 4, 4, 4)]",
      "2. éléments de la page 052 transversaux des six classes : 8/8 ; EXHALE k = demi-tour d’INHALE k : 4/4",
      "   formes rouges ou bleues du corpus qui sont transversales : 0/512 — les éléments sont une donnée de la planche, pas du corpus",
      "3. rosaces : 4 ; douze cases, deux par ligne et par colonne, hors diagonales, à symétrie centrale : True",
      "   (la croix ansée de la page 040 est un autre objet, et il n’y en a que deux : voir tools/croix_ansee.py)",
      "   fermées sous les huit symétries du carré : 8 figures, en 4 orbites de [2]",
      "   support = les 24 cases hors diagonales : True ; couverture par les quatre rosaces : [2] sur 24 cases",
      "4. connexité des formes de colonne, par couple de jonctions (rouge et bleu réunis)",
      "   d₁=0 d₂=0  aucune              32 adjacences, 20 composantes",
      "   d₁=0 d₂=1  cœur-ventre seule   48 adjacences, 12 composantes",
      "   d₁=1 d₂=0  tête-cœur seule     64 adjacences,  4 composantes",
      "   d₁=1 d₂=1  les deux            48 adjacences, 12 composantes",
      "5. formes de colonne selon le décalage",
      "   décalage (6, 6) : constante par colonne True, par ligne False",
      "   décalage (6, 0) : constante par colonne False, par ligne False",
      "   décalage (0, 6) : constante par colonne False, par ligne False"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Les huit éléments INHALE k / EXHALE k sont une donnée de la planche 052 (data/elements-052.json), pas une conséquence du corpus : le script vérifie aussi 0/512. La rosace n'est pas la croix ansée (entrée croix-ansees-2, tools/croix_ansee.py, deux figures)."
  },
  {
   "id": "rosace-lit-le-trigramme",
   "intitule": "Un élément de la page 052, lu sur ses six cases, distingue les huit colonnes du damier ; trois cases suffisent, une par trait",
   "enonce": {
    "texte": "Lire ces six cases sur une ligne du damier distingue les huit colonnes : huit éléments sur huit lignes, 64 fois sur 64. Et trois cases suffisent, une par trait — il y a huit triplets qui marchent dans un élément de six.",
    "langue": "fr",
    "source": "articles/formes-et-figures-transcription.html, « À quoi sert une rosace » (révision 71 d'Anibal)",
    "copie": "articles/formes-et-figures-transcription.html"
   },
   "valeur": {
    "elements_x_lignes": "64/64",
    "cases_suffisantes": 3,
    "triplets_par_element": 8
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [
    "data/elements-052.json"
   ],
   "script": {
    "chemin": "tools/verify_echelle.py",
    "adresse": "https://anibal-amiot.com/tools/verify_echelle.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "6. un élément lu sur ses six cases distingue les huit colonnes : 64/64 (8 éléments × 8 lignes du damier)",
      "   cases nécessaires et suffisantes : [3], [8] triplets par élément — six cases = trois traits lus deux fois"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Point 6 de tools/verify_echelle.py."
  },
  {
   "id": "cle-pied-jonctions-miroirs",
   "intitule": "La cinquième clef lit les deux jonctions ; le pied est l'orientation du carré (miroir gauche-droite en colonne, haut-bas en ligne)",
   "enonce": {
    "texte": "Le trigramme est porté par la forme, le pied par l’orientation.",
    "langue": "fr",
    "source": "tools/verify_cle_pied.py (Anibal), phrase finale ; en-tête points 1 à 3"
   },
   "valeur": {
    "bleu_egal_rouge_oppose": "8/8",
    "couples_de_jonctions": 4,
    "recouvrement_d2": "16/16",
    "miroir_colonne": "256/256",
    "miroir_ligne": "256/256",
    "croisements": "0/256"
   },
   "conditionnel": false,
   "referents": [
    "carres-ordre-6"
   ],
   "donnees": [],
   "script": {
    "chemin": "tools/verify_cle_pied.py",
    "adresse": "https://anibal-amiot.com/tools/verify_cle_pied.py",
    "depose": null
   },
   "preuves": [
    {
     "ci": ".github/workflows/check-referents.yml",
     "lignes": [
      "1. formes constantes par colonne : 8/8 ; bleu(C) = rouge(7 − C) : 8/8 ; rouge et bleu disjoints : True",
      "   les colonnes opposées forment les 4 couples de jonctions : True",
      "     (d1=0, d2=0)  terre / ciel",
      "     (d1=0, d2=1)  tonnerre / vent",
      "     (d1=1, d2=0)  lac / montagne",
      "     (d1=1, d2=1)  eau / feu",
      "2. recouvrement au demi-décalage (3, 3) : 0 case si d2 = 0, 2 si d2 = 1 — 16/16 colonnes",
      "3. pied de la colonne = miroir gauche-droite : 256/256 ; pied de la ligne = miroir haut-bas : 256/256",
      "   les axes ne se croisent pas : 0/256 et 0/256"
     ]
    }
   ],
   "statut": "verifie_ci",
   "note": "Le point 3 relit les 256 carrés : le miroir de chacun est bien son voisin du damier. C'est la preuve sur les données de la « chute du pied » que le point E de verify_cle_damier.py ne fait que poser."
  }
 ]
}
