{
  "doc":"DEV_LINKS_PACK",
  "version":"r2",
  "date":"2025-11-07",
  "mode":"DEV",
  "objectif":"Pack d’accès unifié (endpoints canoniques + politiques JSON dual-publish + métriques d’index + checks).",
  "endpoints":{
    "BASE":"https://repogpt.telki.fr",
    "INDEX_GLOBAL":"https://repogpt.telki.fr/indexes/full_index_all.json",
    "INDEX_GOV":"https://repogpt.telki.fr/indexes/gov/full_index.json",
    "ALIAS__REGISTRY":"https://repogpt.telki.fr/kb/"
  },
  "policies":{
    "DUAL_PUBLISH":{
      "rule":"Publier pour chaque *.json un miroir *.json.txt OCTET-À-OCTET identique.",
      "sidecars":"Générer <name>.json.sha256 et <name>.json.txt.sha256 (ASCII, 1 ligne).",
      "release":"Écrire les 2 formats + 2 sidecars dans la même release; bloquer si mismatch SHA."
    },
    "CLIENT_FALLBACK_POLICY":[
      "Essayer .json (Accept: application/json ; User-Agent normalisé si possible).",
      "Si HTTP!=200 ou taille/parse/SHA anormaux ⇒ basculer .json.txt.",
      "Vérifier SHA de .json.txt; si les deux existent, SHA(.json)==SHA(.json.txt) obligatoire.",
      "En cas d’écart persistant ⇒ remonter NOK DUAL-PUBLISH (mismatch SHA)."
    ],
    "VALIDATION_MINIMALE":[
      "Vérifier 200/200 pour <X>.json et <X>.json.txt.",
      "Comparer SHA remote vs local et SHA .json vs .json.txt (égalité stricte).",
      "Parser le JSON côté client (priorité .json ; fallback .json.txt)."
    ],
    "CONVENTIONS":{
      "encoding":"UTF-8 sans BOM pour .json et .json.txt.",
      "sidecar":"SHA256 ASCII (sans CRLF superflus).",
      "scope":"S’applique à /indexes/**, /ChatGPT-Gouvernance-Projets/_registry/** et tout JSON public."
    },
    "SERVER_HINT_CADDY":{
      "note":"Optionnel mais recommandé.",
      "header":"@json path *.json; header @json Content-Type \"application/json\"",
      "fallback":"try_files {path} {path}.txt (ne remplace pas les contrôles de parité)."
    }
  },
  "metrics_from_local_index":{
    "source":"full_index_all.json",
    "entries_total":8648,
    "roots":[
      "gov",
      "lumiere",
      "seedbox"
    ],
    "mtime_min_Paris":"2025-10-11T18:01:03",
    "mtime_max_Paris":"2025-11-05T22:31:15"
  },
  "presence_checks":{
    "00_DOCUMENTATION/README_GOUVERNANCE.txt":true,
    "_registry/BUG_KB.json":true,
    "_registry/INDEX_GOUVERNANCE_GLOBAL.txt":true,
    "_registry/REGLES_GOUVERNANCE.txt":true,
    "_registry/VERSIONS_REGISTRY.txt":true
  },
  "footers":"DOC-VERSION-FOOTER: DEV_LINKS_PACK r2 — 2025-11-07 — enc=UTF-8 (no BOM)"
}