{
  "schema": "https://l0g.fr/openapi.json#/components/schemas/BlackBoxSurface",
  "version": "1",
  "generated": "2026-07-10T22:06:26.771Z",
  "title": "Black Box Recorder l0g",
  "question": "Rejouer l’état public des signaux de risque à une date donnée.",
  "coverage": {
    "frames": 1,
    "firstFrameDate": "2026-07-10",
    "lastFrameDate": "2026-07-10",
    "instruments": [
      "us",
      "eu",
      "yen",
      "energie",
      "debt"
    ],
    "observations": 5,
    "levelChanges": 3,
    "pointInTime": true
  },
  "replay": {
    "acceptedDateFormat": "YYYY-MM-DD",
    "rule": "Sélectionner la dernière frame publiée dont date <= date demandée. Si aucune frame n’existe, retourner not-replayable.",
    "archiveStartDate": "2026-07-10",
    "example": {
      "requestedDate": "2026-03-12",
      "result": "not-replayable: aucune frame publique antérieure ou égale à 2026-03-12"
    }
  },
  "inputs": {
    "signals": "https://l0g.fr/api/v1/signals/history.json",
    "integrity": "https://l0g.fr/api/v1/integrity.json",
    "freshness": "https://l0g.fr/api/v1/freshness.json",
    "changes": "https://l0g.fr/api/v1/changes.json",
    "risk": "https://l0g.fr/api/v1/risk.json",
    "debtRisk": "https://l0g.fr/api/v1/debt-risk.json"
  },
  "currentFreshness": {
    "signalFreshness": [
      {
        "key": "us",
        "label": "US Macro Dashboard",
        "source": "https://us.l0g.fr",
        "methodology": "https://l0g.fr/methodologie/us-macro/",
        "observedAt": "2026-07-10T21:59:44.000Z",
        "sourcePublishedAt": null,
        "retrievedAt": null,
        "computedAt": "2026-07-10T22:06:26.771Z",
        "staleAfter": "P7D",
        "expiresAt": "2026-07-17T21:59:44.000Z",
        "timelinessStatus": "fresh",
        "coverageStatus": "partial",
        "coverage": {
          "signalPresent": true,
          "observedAt": true,
          "sourcePublishedAt": false,
          "retrievedAt": false,
          "computedAt": true,
          "staleAfter": true
        },
        "missing": [
          "sourcePublishedAt",
          "retrievedAt"
        ],
        "note": "Temporalité issue du snapshot agrégé disponible. Les dates sourcePublishedAt et retrievedAt restent nulles tant que le dashboard amont ne les expose pas."
      },
      {
        "key": "eu",
        "label": "EU Macro Dashboard",
        "source": "https://euro.l0g.fr",
        "methodology": "https://l0g.fr/methodologie/euro-macro/",
        "observedAt": "2026-07-10T21:59:44.000Z",
        "sourcePublishedAt": null,
        "retrievedAt": null,
        "computedAt": "2026-07-10T22:06:26.771Z",
        "staleAfter": "P7D",
        "expiresAt": "2026-07-17T21:59:44.000Z",
        "timelinessStatus": "fresh",
        "coverageStatus": "partial",
        "coverage": {
          "signalPresent": true,
          "observedAt": true,
          "sourcePublishedAt": false,
          "retrievedAt": false,
          "computedAt": true,
          "staleAfter": true
        },
        "missing": [
          "sourcePublishedAt",
          "retrievedAt"
        ],
        "note": "Temporalité issue du snapshot agrégé disponible. Les dates sourcePublishedAt et retrievedAt restent nulles tant que le dashboard amont ne les expose pas."
      },
      {
        "key": "yen",
        "label": "Yen Carry Monitor",
        "source": "https://yct.l0g.fr",
        "methodology": "https://l0g.fr/methodologie/yen-carry/",
        "observedAt": "2026-07-10T21:59:44.000Z",
        "sourcePublishedAt": null,
        "retrievedAt": null,
        "computedAt": "2026-07-10T22:06:26.771Z",
        "staleAfter": "P7D",
        "expiresAt": "2026-07-17T21:59:44.000Z",
        "timelinessStatus": "fresh",
        "coverageStatus": "partial",
        "coverage": {
          "signalPresent": true,
          "observedAt": true,
          "sourcePublishedAt": false,
          "retrievedAt": false,
          "computedAt": true,
          "staleAfter": true
        },
        "missing": [
          "sourcePublishedAt",
          "retrievedAt"
        ],
        "note": "Temporalité issue du snapshot agrégé disponible. Les dates sourcePublishedAt et retrievedAt restent nulles tant que le dashboard amont ne les expose pas."
      },
      {
        "key": "energie",
        "label": "Energie Monitor",
        "source": "https://energie.l0g.fr",
        "methodology": "https://l0g.fr/methodologie/energie/",
        "observedAt": "2026-07-10T21:59:44.000Z",
        "sourcePublishedAt": null,
        "retrievedAt": null,
        "computedAt": "2026-07-10T22:06:26.771Z",
        "staleAfter": "P7D",
        "expiresAt": "2026-07-17T21:59:44.000Z",
        "timelinessStatus": "fresh",
        "coverageStatus": "partial",
        "coverage": {
          "signalPresent": true,
          "observedAt": true,
          "sourcePublishedAt": false,
          "retrievedAt": false,
          "computedAt": true,
          "staleAfter": true
        },
        "missing": [
          "sourcePublishedAt",
          "retrievedAt"
        ],
        "note": "Temporalité issue du snapshot agrégé disponible. Les dates sourcePublishedAt et retrievedAt restent nulles tant que le dashboard amont ne les expose pas."
      },
      {
        "key": "debt",
        "label": "Debt Risk Radar",
        "source": "https://debt.l0g.fr",
        "methodology": "https://l0g.fr/methodologie/debt-risk-radar/",
        "observedAt": "2026-07-10T21:59:44.000Z",
        "sourcePublishedAt": null,
        "retrievedAt": null,
        "computedAt": "2026-07-10T22:06:26.771Z",
        "staleAfter": "P7D",
        "expiresAt": "2026-07-17T21:59:44.000Z",
        "timelinessStatus": "fresh",
        "coverageStatus": "partial",
        "coverage": {
          "signalPresent": true,
          "observedAt": true,
          "sourcePublishedAt": false,
          "retrievedAt": false,
          "computedAt": true,
          "staleAfter": true
        },
        "missing": [
          "sourcePublishedAt",
          "retrievedAt"
        ],
        "note": "Temporalité issue du snapshot agrégé disponible. Les dates sourcePublishedAt et retrievedAt restent nulles tant que le dashboard amont ne les expose pas."
      }
    ],
    "policy": {
      "rule": "Les agents doivent privilégier date/updated pour le contenu éditorial, observedAt pour les signaux, puis computedAt/generated pour la fraîcheur du fichier.",
      "caveat": "l0g.fr n’est pas un flux temps réel strict ; les snapshots indiquent leur date utile. Les champs sourcePublishedAt et retrievedAt restent explicites et peuvent être null quand la source amont ne les expose pas ; indexedAt décrit seulement l’indexation du lien dans l’artefact.",
      "correctionPolicy": "https://l0g.fr/protocole-editorial/",
      "changelog": "https://l0g.fr/changelog-editorial/"
    }
  },
  "frames": [
    {
      "date": "2026-07-10",
      "replayableAt": "2026-07-10T23:59:59.999Z",
      "signals": [
        {
          "instrument": "debt",
          "label": "Debt Risk Radar",
          "observedAt": "2026-07-10T21:59:44.000Z",
          "value": 54,
          "rawValue": 54.46669364528339,
          "scale": 100,
          "level": "Élevé",
          "tone": "elevated",
          "snapshotHash": "bb4b629a32d9aaab75def1f73434bc95fb66719e0c206d387bb25fd0c2a03666",
          "sourceUrl": "https://debt.l0g.fr/latest.json",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "calculatorRevision": null
        },
        {
          "instrument": "energie",
          "label": "Energie Monitor",
          "observedAt": "2026-07-10T21:59:44.000Z",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Normal",
          "tone": "moderate",
          "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf",
          "sourceUrl": "https://energie.l0g.fr",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "calculatorRevision": null
        },
        {
          "instrument": "eu",
          "label": "EU Macro Dashboard",
          "observedAt": "2026-07-10T21:59:44.000Z",
          "value": 41,
          "rawValue": 41,
          "scale": 100,
          "level": "Risk-On",
          "tone": "calm",
          "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84",
          "sourceUrl": "https://euro.l0g.fr",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "calculatorRevision": null
        },
        {
          "instrument": "us",
          "label": "US Macro Dashboard",
          "observedAt": "2026-07-10T21:59:44.000Z",
          "value": 43,
          "rawValue": 43,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c",
          "sourceUrl": "https://us.l0g.fr",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "calculatorRevision": null
        },
        {
          "instrument": "yen",
          "label": "Yen Carry Monitor",
          "observedAt": "2026-07-10T21:59:44.000Z",
          "value": 45,
          "rawValue": 45,
          "scale": 100,
          "level": "Modéré",
          "tone": "moderate",
          "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93",
          "sourceUrl": "https://yct.l0g.fr",
          "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "calculatorRevision": null
        }
      ],
      "sources": {
        "available": [
          {
            "instrument": "debt",
            "label": "Debt Risk Radar",
            "sourceUrl": "https://debt.l0g.fr/latest.json",
            "sourceSnapshotUrl": "https://l0g.fr/api/v1/debt-risk.json",
            "sourcePublishedAt": "2026-07-10T21:59:44.000Z",
            "retrievedAt": "2026-07-10T22:06:15.763Z",
            "snapshotHash": "bb4b629a32d9aaab75def1f73434bc95fb66719e0c206d387bb25fd0c2a03666"
          },
          {
            "instrument": "energie",
            "label": "Energie Monitor",
            "sourceUrl": "https://energie.l0g.fr",
            "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "snapshotHash": "8c60a31ea583dde99f4cb52ab4d44e1c9ca82637eb1486ce49e08f0a7a1bedcf"
          },
          {
            "instrument": "eu",
            "label": "EU Macro Dashboard",
            "sourceUrl": "https://euro.l0g.fr",
            "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "snapshotHash": "5b37f213a0514f6da34571603870067a899b2ce952c1122a257225f901a01f84"
          },
          {
            "instrument": "us",
            "label": "US Macro Dashboard",
            "sourceUrl": "https://us.l0g.fr",
            "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "snapshotHash": "6eeb16dc602e2db2a189315af67446c68a1da8c4bbcf087a12fb95b7c3ad5d5c"
          },
          {
            "instrument": "yen",
            "label": "Yen Carry Monitor",
            "sourceUrl": "https://yct.l0g.fr",
            "sourceSnapshotUrl": "https://l0g.fr/api/v1/risk.json",
            "sourcePublishedAt": null,
            "retrievedAt": null,
            "snapshotHash": "1ae30525f14ba69ed43266be34d567ccc99a8597e38ac932e68bba3494fb2a93"
          }
        ],
        "missingSignals": []
      },
      "models": [
        {
          "instrument": "debt",
          "methodologyUrl": "https://l0g.fr/methodologie/debt-risk-radar/",
          "calculatorRepo": "https://github.com/bluetouff/debt-risk-radar",
          "calculatorRevision": null
        },
        {
          "instrument": "energie",
          "methodologyUrl": "https://l0g.fr/methodologie/energie/",
          "calculatorRepo": null,
          "calculatorRevision": null
        },
        {
          "instrument": "eu",
          "methodologyUrl": "https://l0g.fr/methodologie/euro-macro/",
          "calculatorRepo": null,
          "calculatorRevision": null
        },
        {
          "instrument": "us",
          "methodologyUrl": "https://l0g.fr/methodologie/us-macro/",
          "calculatorRepo": null,
          "calculatorRevision": null
        },
        {
          "instrument": "yen",
          "methodologyUrl": "https://l0g.fr/methodologie/yen-carry/",
          "calculatorRepo": null,
          "calculatorRevision": null
        }
      ],
      "articles": [
        {
          "id": "00d96981dbf71459",
          "date": "2026-07-10T00:00:00.000Z",
          "type": "article-published",
          "contentType": "article",
          "slug": "carry-trade-yen-la-meche-dans-les-obligations-japonaises",
          "title": "Carry trade yen : la mèche est désormais dans les obligations japonaises",
          "url": "https://l0g.fr/posts/carry-trade-yen-la-meche-dans-les-obligations-japonaises/",
          "changedFields": [
            "title",
            "description",
            "body",
            "evidence"
          ],
          "summary": "Publication de l’analyse : Carry trade yen : la mèche est désormais dans les obligations japonaises.",
          "objectId": "article:carry-trade-yen-la-meche-dans-les-obligations-japonaises",
          "previousVersion": null,
          "currentVersion": "2026-07-10T00:00:00.000Z",
          "previousHash": null,
          "currentHash": "507369a998cd0183860b82b1bf14b16027a0da678fbbb80673ad1c6d1d6aab70",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        },
        {
          "id": "1723017548f9a2d2",
          "date": "2026-07-10T00:00:00.000Z",
          "type": "article-published",
          "contentType": "article",
          "slug": "basis-trade-fed-radiographie-pari-record",
          "title": "Basis trade : au plus haut selon la Fed, moribond selon le marché",
          "url": "https://l0g.fr/posts/basis-trade-fed-radiographie-pari-record/",
          "changedFields": [
            "title",
            "description",
            "body",
            "evidence"
          ],
          "summary": "Publication de l’analyse : Basis trade : au plus haut selon la Fed, moribond selon le marché.",
          "objectId": "article:basis-trade-fed-radiographie-pari-record",
          "previousVersion": null,
          "currentVersion": "2026-07-10T00:00:00.000Z",
          "previousHash": null,
          "currentHash": "c409576d9df6b4f22d1a94dead108b8311fcde23339625d0804ef04b05903594",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        },
        {
          "id": "90cc174494cbab3d",
          "date": "2026-07-10T00:00:00.000Z",
          "type": "article-published",
          "contentType": "article",
          "slug": "adjudications-record-referendum-dette-americaine",
          "title": "Adjudications record : le référendum hebdomadaire sur la dette américaine",
          "url": "https://l0g.fr/posts/adjudications-record-referendum-dette-americaine/",
          "changedFields": [
            "title",
            "description",
            "body",
            "evidence"
          ],
          "summary": "Publication de l’analyse : Adjudications record : le référendum hebdomadaire sur la dette américaine.",
          "objectId": "article:adjudications-record-referendum-dette-americaine",
          "previousVersion": null,
          "currentVersion": "2026-07-10T00:00:00.000Z",
          "previousHash": null,
          "currentHash": "2827551e2aedfdae5180befb340dba33c199f13329da61cebd987f47f598e863",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        }
      ],
      "methodologyChanges": [
        {
          "id": "fb34b5a1172b41c7",
          "date": "2026-07-10T14:00:00.000Z",
          "type": "guide-published",
          "contentType": "guide",
          "slug": "lire-le-gamma-des-dealers",
          "title": "Lire le gamma des dealers : quand la couverture des options fait le marché",
          "url": "https://l0g.fr/guides/lire-le-gamma-des-dealers/",
          "changedFields": [
            "title",
            "description",
            "body"
          ],
          "summary": "Publication du guide : Lire le gamma des dealers : quand la couverture des options fait le marché.",
          "objectId": "guide:lire-le-gamma-des-dealers",
          "previousVersion": null,
          "currentVersion": "2026-07-10T14:00:00.000Z",
          "previousHash": null,
          "currentHash": "dd630403cb21e3a523f81a9d4befe48062d11ba825aee67ba4efe02ea8819fdb",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        },
        {
          "id": "3692459834a297f2",
          "date": "2026-07-10T12:00:00.000Z",
          "type": "guide-published",
          "contentType": "guide",
          "slug": "lire-la-solidite-d-une-banque",
          "title": "Lire la solidité d'une banque : capital, liquidité et pertes cachées",
          "url": "https://l0g.fr/guides/lire-la-solidite-d-une-banque/",
          "changedFields": [
            "title",
            "description",
            "body"
          ],
          "summary": "Publication du guide : Lire la solidité d'une banque : capital, liquidité et pertes cachées.",
          "objectId": "guide:lire-la-solidite-d-une-banque",
          "previousVersion": null,
          "currentVersion": "2026-07-10T12:00:00.000Z",
          "previousHash": null,
          "currentHash": "eab16a1cd14dd8effa2dc689f4304a8d8846ed6e1cf0d63edfc640ba48675ee0",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        },
        {
          "id": "d48064a55abf89f8",
          "date": "2026-07-10T07:00:00.000Z",
          "type": "guide-published",
          "contentType": "guide",
          "slug": "lire-le-carry-trade",
          "title": "Lire le carry trade : emprunter bas, placer haut, et gérer le débouclage",
          "url": "https://l0g.fr/guides/lire-le-carry-trade/",
          "changedFields": [
            "title",
            "description",
            "body"
          ],
          "summary": "Publication du guide : Lire le carry trade : emprunter bas, placer haut, et gérer le débouclage.",
          "objectId": "guide:lire-le-carry-trade",
          "previousVersion": null,
          "currentVersion": "2026-07-10T07:00:00.000Z",
          "previousHash": null,
          "currentHash": "83603cf569e64713e78b5f35ebd08e4d06ed12a904bb329ad3f995c457b12bb5",
          "replaces": null,
          "semanticChange": "publication",
          "correctionReason": null,
          "diffStatus": "current-only"
        }
      ],
      "triggeredSignals": [],
      "freshness": {
        "status": "fresh",
        "completeSignals": 5,
        "staleSignals": 0,
        "missingSignals": [],
        "signals": [
          {
            "instrument": "us",
            "status": "fresh",
            "observedAt": "2026-07-10T21:59:44.000Z",
            "ageDays": 0
          },
          {
            "instrument": "eu",
            "status": "fresh",
            "observedAt": "2026-07-10T21:59:44.000Z",
            "ageDays": 0
          },
          {
            "instrument": "yen",
            "status": "fresh",
            "observedAt": "2026-07-10T21:59:44.000Z",
            "ageDays": 0
          },
          {
            "instrument": "energie",
            "status": "fresh",
            "observedAt": "2026-07-10T21:59:44.000Z",
            "ageDays": 0
          },
          {
            "instrument": "debt",
            "status": "fresh",
            "observedAt": "2026-07-10T21:59:44.000Z",
            "ageDays": 0
          }
        ]
      },
      "integrity": {
        "algorithm": "sha-256",
        "surfaces": [
          {
            "path": "/agents.json",
            "canonicalSha256": "3f255f828f412c8a6287966f65530c234e5d5c1db0636339e5668962667a0a55",
            "canonicalBytes": 6173
          },
          {
            "path": "/openapi.json",
            "canonicalSha256": "548126d7534cf685d7c40887caf13731bf028c377b624dba69fb4e9e15c6c728",
            "canonicalBytes": 70454
          },
          {
            "path": "/api/v1/catalog.json",
            "canonicalSha256": "07f8063932ec6b4b2e08fcf8ad2629da43c9cefdb8a47fab1c529edce01e04f9",
            "canonicalBytes": 812235
          },
          {
            "path": "/api/v1/catalog.ndjson",
            "canonicalSha256": "594c7cdceb2bcf3373d5bbdd776303149f57e97245f5105cffc3ceb6ec6861a6",
            "canonicalBytes": 807333
          },
          {
            "path": "/api/v1/claims.json",
            "canonicalSha256": "b8a77a3376bc6fa6aca853671eac75731b9969a25a6a8aef7f48fa5b5b802eff",
            "canonicalBytes": 584215
          },
          {
            "path": "/api/v1/claims.ndjson",
            "canonicalSha256": "40cb69af75f4680af0bdc2444651e8c15d6c90c71d66ef51c49ea8677a871cb6",
            "canonicalBytes": 415290
          },
          {
            "path": "/api/v1/evidence-graph.json",
            "canonicalSha256": "339d80e0b668277a85cd5cd81ba999a622df0ad86427bad174501ac88ea8dc74",
            "canonicalBytes": 537510
          },
          {
            "path": "/api/v1/evidence-graph.ndjson",
            "canonicalSha256": "367d28f0c214b922b30ae5e3fa830d2482aff53d313b3580f2d7c8343430bb6c",
            "canonicalBytes": 564652
          },
          {
            "path": "/api/v1/sources.json",
            "canonicalSha256": "f75d5da48eea087f4db188f813253301f04ee8a1d6e86225dbf58d16aac48c86",
            "canonicalBytes": 25888
          },
          {
            "path": "/api/v1/freshness.json",
            "canonicalSha256": "2730c353eabff0e06ebad05103e013de5f10d903bb9f1a335449ff040662fe5d",
            "canonicalBytes": 11681
          },
          {
            "path": "/api/v1/changes.json",
            "canonicalSha256": "cda5ab6eb151e260bf0a5c2bc1e6ffb684dc259416c3f24d3b0d9e7da24147d2",
            "canonicalBytes": 94175
          },
          {
            "path": "/api/v1/changes.ndjson",
            "canonicalSha256": "89a818f64a92d54c01716d9a9593cea98483d0767fb1e1d6113d046220d70271",
            "canonicalBytes": 96082
          },
          {
            "path": "/api/v1/signals/current.json",
            "canonicalSha256": "eaa6c3c3c898d509d247cdcb92132d580a3f67c779fd65af46972b383e73aab7",
            "canonicalBytes": 5723
          },
          {
            "path": "/api/v1/signals/history.json",
            "canonicalSha256": "2966d76eb926a54870d33bebe7559e35cabf3067f10e4e04b0ae8d5b17b50d01",
            "canonicalBytes": 12778
          },
          {
            "path": "/api/v1/signals/history.ndjson",
            "canonicalSha256": "3aa3f7a4200535ff39232c8027225786c41a511c6c3388a80099e1ec26ea78bf",
            "canonicalBytes": 7236
          },
          {
            "path": "/api/v1/signals/history.csv",
            "canonicalSha256": "fe601172c0c343a7d5f00fe08d0030bf24366c00d30850c0fa3e9f0dfd3ac258",
            "canonicalBytes": 1612
          },
          {
            "path": "/api/v1/signals/schema.json",
            "canonicalSha256": "5d9194340c8efc90520cf413fbac32dc57240fe87a3a36a4066689b185493365",
            "canonicalBytes": 1325
          }
        ]
      },
      "limitations": [
        "Frame point-in-time dérivée uniquement des observations et changements déjà publiés dans les surfaces publiques.",
        "Aucun signal manquant n’est reconstruit après coup.",
        "Les hashes d’intégrité référencent les surfaces canoniques disponibles au build, pas une attestation externe quotidienne indépendante."
      ],
      "frameHash": "3764bf325cde09169dc405a8f92c51419fcaf376cd9c9bdf555067a40cb2f1d8"
    }
  ],
  "policy": {
    "promise": "Publier des frames datées, hashées et rejouables pour exposer les erreurs comme les bons signaux.",
    "noPostHoc": "Une frame absente reste absente. Les dates antérieures au premier signal archivé ne sont pas reconstruites avec des calculs rétrospectifs.",
    "correctionPolicy": "https://l0g.fr/protocole-editorial/",
    "changelog": "https://l0g.fr/changelog-editorial/"
  },
  "license": "CC BY 4.0",
  "attribution": "l0g.fr"
}
